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类型?或者这些类型的强制转换不值得担心吗?这更像是编译器程序员比我们卑微的高级开发人员更聪明。。。