C# 我应该使用数据类型文字吗?
例如:C# 我应该使用数据类型文字吗?,c#,types,literals,primitive-types,C#,Types,Literals,Primitive Types,例如: ulong someVariable = 1000; 编译器会将1000表示为int,对吗?使用……是否更好 ulong someVariable = 1000UL; 因为这样可以避免铸造?这是我应该担心的事情吗?不,这不是你应该担心的事情,永远不会 在不太可能的情况下,任何编译器都会为这两种情况生成不同的代码,因此很难想象会有任何值得担心的性能差异。这是最糟糕的过早和不必要的优化。这不值得你花时间 仅供参考,我已经确认,至少在vs2012中,微软的编译器在这两种情况下产生完全相同的
ulong someVariable = 1000;
编译器会将1000表示为int,对吗?使用……是否更好
ulong someVariable = 1000UL;
因为这样可以避免铸造?这是我应该担心的事情吗?不,这不是你应该担心的事情,永远不会 在不太可能的情况下,任何编译器都会为这两种情况生成不同的代码,因此很难想象会有任何值得担心的性能差异。这是最糟糕的过早和不必要的优化。这不值得你花时间 仅供参考,我已经确认,至少在vs2012中,微软的编译器在这两种情况下产生完全相同的代码
IL_0000: ldarg.0
IL_0001: ldc.i4 0x3e8
IL_0006: conv.i8
IL_0007: stfld uint64 ClassLibrary1.Class1::suffixed
IL_000c: ldarg.0
IL_000d: ldc.i4 0x3e8
IL_0012: conv.i8
IL_0013: stfld uint64 ClassLibrary1.Class1::unsuffixed
在大多数情况下,编译器能够在编译期间将右侧的表达式转换为正确的形式,因此IL中的值是最直接的形式 要验证这一点,您可以检查ildasm或类似工具。这包括文字的字符串连接
所以,在这种情况下,不用担心。如果你在做一些更微妙的事情:也许吧。谢谢你的评论,有什么原因吗?编译器是否推断1000为ulong类型?或者这些类型的强制转换不值得担心吗?这更像是编译器程序员比我们卑微的高级开发人员更聪明。。。