【问题标题】:By default datatype of literal 0 is int?默认情况下,字面量 0 的数据类型是 int?
【发布时间】:2018-01-14 15:28:19
【问题描述】:

默认数据类型0是int?

错误: 无法将类型“int”隐式转换为“short”。

public short CardType { get; set; }
CardType = 0;

这个说法也不错。

short CardType = 0;

注意:这与投射无关。我想了解为什么默认不能短0?

感谢您提供有用的理解。

【问题讨论】:

标签: c#


【解决方案1】:

是的,默认情况下,数字文字是 int,除非您另外指定,例如可以使用 M 声明小数

var myDecimal = 0M;

F 用于浮动,L 用于长。但是short 没有一个,你只需要依赖一个演员:

public short CardType { get; set; }
CardType = (short)0;

关于您的编辑:

这不是铸造的问题。我想了解为什么默认不能短0?

它不相关 - 默认情况下,整数必须是 some 数据类型,在这种情况下,它们只是默认为 int,根据 Language specification

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

  • 如果字面量没有后缀,则它具有可以表示其值的以下类型中的第一个:intuintlongulong
  • 如果文字以Uu 为后缀,则它具有可以表示其值的第一个类型:uintulong
  • 如果文字以Ll 为后缀,则它具有可以表示其值的第一个类型:longulong
  • 如果文字以ULUluLulLULulUlu 为后缀,则其类型为lu

【讨论】:

  • 默认情况下,数字文字是 int。明白了。
【解决方案2】:

你需要这样做:

public short CardType { get; set; }
CardType = (short)0;

【讨论】:

    【解决方案3】:

    确实,0 的类型在所有 C 类型语言中都是 int;包括 C#。

    short 文字没有符号。

    因此,在编译器无法或不允许消除歧义的情况下,您需要使用强制转换:

    CardType = (short)0;
    

    【讨论】:

      【解决方案4】:

      你需要的是类型转换

      CardType = (short)0;
      

      你可能想看看this

      【讨论】:

        猜你喜欢
        • 2011-12-27
        • 1970-01-01
        • 2014-11-28
        • 1970-01-01
        • 2016-05-19
        • 1970-01-01
        • 2013-05-26
        • 1970-01-01
        • 2012-02-29
        相关资源
        最近更新 更多