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"来说,这只是懒惰...