如何确定变量的大小?

7

我有一个声明如下的变量:

var a = 99494;

然后我使用以下方法来确定变量的字节数:

Marshal.SizeOf(a)

它能获取该值所占用的实际内存大小吗?


5
var 只是“我不想写这个变量的类型。编译器,请完成这项工作并假装我写了类型”。 - Damien_The_Unbeliever
1
实际代码将被编译为 int a = 99494;,因为 99494int 类型。 - Lasse V. Karlsen
1
int size = sizeof(a); 因为 99494int (Int32) 类型,它占用 32 位 = 4 字节。 - Dmitry Bychenko
2个回答

10

它是否获取了该值占用的实际内存大小?

是的。在这种情况下非常简单,因为var是一个int类型。它总是会产生相同的值(4)。(var不是动态类型,而是在编译时确定的。)


1
是的,var只是编译时的技巧,所以编译器会在编译时决定它的类型。除了明显和非常长的类名之外,我不建议使用它。例如:var x = new BigBigBigClass()。这使得其他人阅读您的代码更加困难,并且容易出错。C#是一种静态类型语言,虽然声明类型需要多花费几秒钟,但当您不小心混淆类时,它会付出回报。
由于编译器将x作为int放置,因此应返回32位(4字节),因为这是标准int的大小。

2
为什么不应该使用var?您没有给出任何推荐理由。我建议您将这部分从答案中移除,因为它与所问的问题无关。 - Patrick Hofman
2
讨论是否使用var是没有意义的,除了极少数情况下必须使用var之外,其余情况只是个人观点。 - Lasse V. Karlsen
1
很好地解释了答案! - Impostor
1
关于所提出的问题没有任何解释。建议在某些地方是不正确的,因此我不会说它特别好解释。 - Patrick Hofman
2
我认为使用 var 可以通过促使你想出更好的命名来使代码更易读。而且我不确定关于“更容易犯错误”的部分,因为编译器不会允许你这样做,而且即使在构建之前,VS Code 分析也会用红色下划线标出“错误”。正如先前提到的,这只是最好基于个人观点的看法。 - Vladi Pavelka
2
我不同意关于var的观点——当你可以将工厂切换为返回接口而不是实现时,重构会变得更加容易,而无需在使用它的每个地方更新变量类型。这样开发人员的生活会更轻松,编译器也能保持类型安全——这是双赢的结果。 - s3raph86

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接