C#编译器编号文字
时间:2020-03-06 15:04:26 来源:igfitidea点击:
有人知道Ccompiler数字文字修饰符的完整列表吗?
默认情况下,将'0'声明为Int32,将'0.0'声明为'Double'。我可以在最后使用文字修饰符" f",以确保将某些内容视为"单一"。像这样的例子。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
var x = 0; // x is Int32 var y = 0f; // y is Single
我还可以使用其他修饰符吗?是否有一个强制转换为Double,Decimal,UInt32?我为此尝试使用Google搜索,但找不到任何东西。也许我的术语是错误的,所以可以解释为什么我空白。任何帮助,不胜感激。
解决方案
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)
从规范2.4.4.2整数文字和2.4.4.3实数文字开始。请注意,为了清晰起见,Jon Skeet建议使用L和UL而不是小写字母。
我们可能需要先查看Clanguage规范。其中列出了大多数类型,并带有后缀:
- L =长
- F =浮动
- U = uint
- 乌龙的有点不同
- m =十进制(货币)
- D =两倍
当然,如果我们停止使用var,那么我们会解决整个问题,并且代码将变得更具可读性(好吧,那是主观的,但是对于类似这样的东西,其他人更容易理解:
var x = 0; //whats x? float x = 0; //oh, it's a float byte x = 0; // or not!
如果我们不想记住它们,那么编译器也会出于相同目的接受转换(我们可以检查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"来说,这只是懒惰...