有谁知道C#编译器编号文字修饰符的完整列表?
默认情况下,声明'0'使其成为Int32,'0.0'使其成为'Double'。我可以在末尾使用文字修饰符“f”来确保将某些内容视为“单个”。比如这样......
var x = 0; // x is Int32
var y = 0f; // y is Single
我可以使用的其他修饰符是什么?是否有一个强制Double,Decimal,UInt32?我试着谷歌搜索但找不到任何东西。也许我的术语是错误的,这就解释了为什么我的空白。任何帮助非常感谢。
答案 0 :(得分:55)
var y = 0f; // y is single
var z = 0d; // z is double
var r = 0m; // r is decimal
var i = 0U; // i is unsigned int
var j = 0L; // j is long (note capital L for clarity)
var k = 0UL; // k is unsigned long (note capital L for clarity)
来自C# specification 2.4.4.2整数文字和2.4.4.3真实文字。请注意,根据Jon Skeet的建议,L和UL是首选而不是小写变体。
答案 1 :(得分:12)
如果你不想记住它们,那么编译器也接受一个强制转换用于相同的目的(你可以检查IL效果是否相同 - 即编译器,而不是运行时,执行转换)。借用前面的例子:
var y = (float)0; // y is single
var z = (double)0; // z is double
var r = (decimal)0; // r is decimal
var i = (uint)0; // i is unsigned int
var j = (long)0; // j is long
var k = (ulong)0; // k is unsigned long
为了记录,我同意“var”在这里是一个糟糕的选择;我很乐意将var用于SortedDictionary< SomeLongType,SomeOtherLongType>,但对于“int”,它只是懒惰......
答案 2 :(得分:5)
您可能希望从looking at the C# language spec开始。大多数类型都列在那里,并有一个后缀:
当然,如果您停止使用 var ,那么您可以解决整个问题,并且您的代码变得更具可读性(好吧,这是主观的,但对于这样的事情,它更容易被其他人阅读:
var x = 0; //whats x?
float x = 0; //oh, it's a float
byte x = 0; // or not!