【问题标题】:Is there a simple way to determine type size in C#?有没有一种简单的方法来确定 C# 中的类型大小?
【发布时间】:2010-09-26 16:43:46
【问题描述】:

有没有办法这样说:

大小(类型)?还是 type.Size?

现在我正在考虑使用如下代码:

if (type.Equals(typeof(int)))
    return sizeof(int);
else if (type.Equals(typeof(long)))
    return sizeof(long);

等,等等,对于每一种数据类型。

必须有更清洁的解决方案,不是吗?

【问题讨论】:

  • 你能解释一下你想要做什么的原因吗?
  • 这很有趣,我昨天差点发布这个确切的问题,但没有时间。我需要完全相同的东西来使用 ADO.NET DbParameters。有时它会强制您设置 DbParameter.Size,即对象的大小(以字节为单位)。我也有一个很大的 switch 声明,就像你最初发布的那样:)

标签: c#


【解决方案1】:

【讨论】:

  • 这看起来像是获取内存中特定对象或值的大小,不一定与类型的大小相同。
  • 还有一个类型重载。我错误地链接到对象版本。很快就会更新
  • 仍然,来自文档:“返回的大小实际上是非托管类型的大小。对象的非托管和托管大小可能不同。对于字符类型,大小受 CharSet 影响应用于该类的值。”根据用例的不同,它可能会产生误导。
  • 它也为 bool 返回一个不同的值: bool boolean = true;类型类型 = boolean.GetType(); Console.WriteLine(sizeof(bool)); Console.WriteLine(Marshal.SizeOf(type));第一行输出“1”,第二行输出“4”。
  • 链接到我写的关于这个主题的博客文章:blogs.msdn.com/jaredpar/archive/2008/10/14/…
【解决方案2】:

如果这是用于数据访问,您可以执行 type.GetTypeCode()(它是 IConvertible 的成员),它为您提供了一个很好的枚举来打开。

【讨论】:

    【解决方案3】:
    【解决方案4】:

    也许你可以去 Convert.ToString(type.MaxValue, 2).Length / 8 ?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      相关资源
      最近更新 更多