- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
有什么方法可以让 sizeof()
成为泛型类型?例如
public int GetSize<T>()
{
return sizeof(T); //this wont work because T isn't assigned but is there a way to do this
}
如示例中所述,以上是不可能的,但是有没有办法让它起作用?尝试执行 public unsafe int
但它没有改变任何东西。真的不想做类似的事情
public int GetSize<T>()
{
if (typeof(T) == typeof(byte) || typeof(T) == typeof(sbyte))
{
return 1;
}
else if (typeof(T) == typeof(short) || typeof(T) == typeof(ushort) || typeof(T) == typeof(char))
{
return 2;
}
//and so on.
}
最佳答案
你可以使用
Marshal.SizeOf(typeof(T));
请注意,如果您滥用它,将会引发各种意想不到的结果。
也许,您可以将通用方法限制为对您有意义的类型
,即int
、long
,等
还要小心这样的事情 Marshal.SizeoOf(typeof(char)) == 1。
更新
正如 MickD 在他的评论中发表的那样,(毫不奇怪)编译器向导 Eric Lippert 发表了一篇关于一些细节的博文
What’s the difference? sizeof and Marshal.SizeOf
更新
此外,正如 MickD 所指出的,为了让任何阅读此 Marshal.SizeOf
的年轻 Jedi
都清楚,返回非托管大小。
Returns the size of an unmanaged type in bytes.
The size returned is the size of the unmanaged type. The unmanaged and managed sizes of an object can differ. For character types, the size is affected by the CharSet value applied to that class.
关于c# - 你能确定泛型的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49185899/
我是一名优秀的程序员,十分优秀!