【问题标题】:List of .Net Numeric Type Initialization Identifiers.Net 数值类型初始化标识符列表
【发布时间】:2009-03-26 22:45:42
【问题描述】:

我正在寻找 C# 和 VB.Net 的列表数字类型初始化标识符。

例如:

Dim x = 1D 'Decimal'
Dim y = 1.0 'initializes to float'

这是列表:

标识符不区分大小写

VB.Net

Int32 = 1,我 双倍 = 1.0, R, 1.0e5 小数 = D 单 = F, ! Int16 = S UInt64 = L, UL

C#

【问题讨论】:

  • 我也是...太长了,我不得不依赖文档(和内存)来获得这个排序列表。

标签: c# .net vb.net


【解决方案1】:

C#

Section 1.8 of the C# specification 包含这些值。

整数类型后缀:U u L l UL 之一 呜呜呜呜呜呜呜呜呜呜呜

实类型后缀:F f D d M m 之一

Section 2.4.4.2 针对整数类型对此进行了详细说明:

整数字面量的类型是 确定如下:

  • 如果文字没有后缀,则它具有以下类型中的第一个 它的值可以表示为:int, uint、long、ulong。
  • 如果文字以 U 或 u 为后缀,则它具有这些类型中的第一个 它的值可以表示为: uint, ulong。
  • 如果文字以 L 或 l 为后缀,则它具有以下类型中的第一个 它的值可以表示为: 长,乌龙。
  • 如果文字以 UL、Ul、uL、ul、LU、Lu、lU 或 lu 为后缀,则为 ulong 类型。

Section 2.4.4.3 针对 Real 类型对此进行了详细说明:

如果没有指定实类型后缀, 真实文字的类型是 双倍的。否则,真实类型 后缀决定了实数的类型 字面意思,如下:

  • 以 F 或 f 为后缀的实数文字是浮点类型。例如, 文字 1f、1.5f、1e10f 和 123.456F 都是float类型。
  • 以 D 或 d 为后缀的实数文字是 double 类型。例如, 文字 1d、1.5d、1e10d 和 123.456D 都是双精度类型。
  • 以 M 或 m 为后缀的实数文字是十进制类型。例如, 文字 1m、1.5m、1e10m 和 123.456M 都是十进制类型。这个字面 被转换为十进制值 取确切的值,并且,如果 必要的,四舍五入到最接近的 使用银行家的可表示价值 四舍五入(第 4.1.7 节)。任何规模 在字面上明显被保留 除非该值是四舍五入或 值为零(在后一种情况下 符号和比例将为 0)。因此, 文字 2.900m 将被解析为 形成带符号 0 的小数, 系数 2900,尺度 3。

VB

同样,VB 规范包含IntegerFloating point 文字的详细信息。

对于整数:

短字符 ::= S
整数字符 ::= 我
长字符 ::= L

对于浮点数:

单字符 ::= F
双字符 ::= R
十进制字符 ::= D

【讨论】:

  • 说明哪个值映射到哪个类型可能会有所帮助。
  • 好的,我已经从语言规范中添加了详细信息。 :)
【解决方案2】:

就个人而言,我并不总是使用标识符,这正是这里提出的原因(内存)。 C# 编译器的一个有趣特性是它实际上将以下内容编译为相同的内容:

static void Foo()
{
    var x = 100F;
    Console.WriteLine(x);
}
static void Bar()
{
    var x = (float)100; // compiled as "ldc.r4 100" - **not** a cast
    Console.WriteLine(x);
}

我发现第二个版本更具可读性。所以我使用这种方法。 AFAIK 唯一一次做任何不同的事情是使用带有尾随零的小数 - 即

static void Foo()
{
    var x = 100.00M;
    Console.WriteLine(x);
}
static void Bar()
{
    var x = (decimal)100.00; // compiled as 100M - extended .00 precision lost
    Console.WriteLine(x);
}

【讨论】:

    【解决方案3】:

    在VB中你应该有

    选项严格开启

    Dim x as Decimal = 1D 'Decimal'
    Dim y as Double = 1.0 'initializes to double'
    Dim z as Integer = 1 'integer
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-20
      • 2015-04-24
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      相关资源
      最近更新 更多