当前位置:  开发笔记 > 编程语言 > 正文

C#编译器编号文字

如何解决《C#编译器编号文字》经验,为你挑选了3个好方法。

有谁知道C#编译器编号文字修饰符的完整列表?

默认情况下,声明'0'使其成为Int32,'0.0'使其成为'Double'.我可以在末尾使用文字修饰符"f"来确保将某些内容视为"单个".比如这样......

var x = 0;    // x is Int32
var y = 0f;   // y is Single

我可以使用的其他修饰符是什么?是否有一个强制Double,Decimal,UInt32?我试着谷歌搜索但找不到任何东西.也许我的术语是错误的,这就解释了为什么我的空白.任何帮助非常感谢.



1> user7116..:
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实数文字.请注意,由于Jon Skeet的推荐,L和UL是优选的,而不是它们的小写变体.


虽然l肯定对多头有效,但我建议使用L代替它 - 它同样有效,并且看起来不像"1"
@Jon Skeet:C程序员的坏习惯,补充了你的建议.

2> Marc Gravell..:

如果你不想记住它们,那么编译器也接受一个用于相同目的的强制转换(你可以检查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 ,但对于"int",它只是懒惰...


要回答注释中的问题,(十进制)1.000000000000001评估为1,而1.000000000000001m评估为1.000000000000001.在前一种情况下,计算机将文字解析为double,然后将其转换为小数.

3> Nic Wise..:

您可能希望从查看C#语言规范开始.大多数类型都列在那里,并有一个后缀:

L =长

F =浮动

U = uint

ulong 有点不同

m =十进制(钱)

D =双倍

当然,如果你停止使用var那么你可以解决整个问题,并且你的代码变得更具可读性(好吧,这是主观的,但对于这样的事情,它更容易被其他人阅读:

var x = 0; //whats x?
float x = 0; //oh, it's a float
byte x = 0; // or not!

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有