有没有办法让sizeof()
成为通用类型? e.g。
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.
}
答案 0 :(得分:1)
您可以使用
Marshal.SizeOf(typeof(T));
请注意,如果你滥用它会导致各种意想不到的结果。
也许,您可以对通用方法限制约束Types
对您有意义,例如int
,long
,等等
还要警惕这样的事情Marshal.SizeoOf(typeof(char)) == 1.
<强>更新强>
正如 MickD 在他的评论中发布的那样,(并且不出所料)编译器向导 Eric Lippert 在一些更精细的点上发表了博客文章
What’s the difference? sizeof and Marshal.SizeOf
<强>更新强>
另外,正如 MickD 指出的那样,为了明确任何年轻的Jedi
阅读,Marshal.SizeOf
会返回非托管大小。
以字节为单位返回非托管类型的大小。
返回的大小是非托管类型的大小。无人管理和 对象的托管大小可以不同。对于字符类型,大小 受应用于该类的CharSet值的影响。