有人知道 C# 编译器数字文字修饰符的完整列表吗?
默认情况下,声明“0”使其成为 Int32,“0.0”使其成为“Double”。我可以在末尾使用文字修饰符“f”来确保某些内容被视为“Single”。例如这样...
var x = 0; // x is Int32
var y = 0f; // y is Single
我还可以使用哪些其他修饰符?有没有强制转换为 Double、Decimal、UInt32 的方法?我尝试用谷歌搜索这个但找不到任何东西。也许我的术语是错误的,所以这解释了为什么我会一片空白。非常感谢任何帮助。
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# 规范 2.4.4.2 整数文字和 2.4.4.3 实数文字。请注意,为了清晰起见,首选 L 和 UL,而不是它们的小写变体,正如 Jon Skeet 所建议的那样。
如果您不想记住它们,那么编译器也接受出于相同目的的强制转换(您可以检查效果是否相同的 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
您可能需要首先查看 C# 语言规范。大多数类型都列在那里,并有一个后缀:
当然,如果你停止使用var 那么你就解决了整个问题,并且你的代码变得更具可读性(好吧,这是主观的,但对于这样的东西,其他人更容易阅读:
var x = 0; //whats x?
float x = 0; //oh, it's a float
byte x = 0; // or not!