如何在不进行转换的情况下指定短的int文字?

有没有办法指定我的变量是一个短的int? 我正在寻找类似于M后缀的小数字。 对于小数,我不必说

var d = (decimal)1.23; 

我可以写如下:

 var d = 1.23M; 

有没有办法写这个

  var s = SomeLiteralWithoutCast 

所以s暗示是短的int?

简短的回答, 没有 。 在C#中,没有字母S可以用作var a = 123S ,表示a类型为short 。 有L longF代表floatD代表doubleM代表decimal但不是S 如果有的话会很好,但是没有。

 var a = 1M; // decimal var a = 1L; // long var a = 1F; // float var a = 1D; // double var a = 1; // int var a = 1U; // uint var a = 1UL; // ulong 

但不是

 var a = 1S; // not possible, you must use (short)1; 

这个问题有点令人困惑。 我们来定义一些术语:

常量表达式 (粗略地说)是编译器已知的特定常量值的表达式。

文字是一种特殊的常数表达; 123Math.PI都是常量表达式。 前者是文字,后者不是。

常量字段是使用常量表达式初始化的类型的成员,然后可以在其他地方用作常量表达式。 Math.PI是常量字段的示例。

局部常量就像一个常量字段,但是作用于一个块。 (就像局部变量的范围是一个块。)

常量字段和局部常量需要明确说明其类型; 常量没有“var”forms。 (这个想法令人不寒而栗;“const var”显然是矛盾的。)

局部变量不需要说明其类型; 可以从初始化程序推断出类型。 这种局部变量称为“隐式类型局部变量”。

所以你的问题是“有没有办法写一个short类型的文字常量表达式,可以用来初始化short类型的隐式类型局部变量?”

不,那里没有。 您可以显式键入局部变量:

 short s1 = 123; 

您可以显式键入本地常量:

 const short s2 = 123; 

或者你可以创建一个包含一个强制转换的常量表达式:

 var s3 = (short)123; 

或者,您可以使局部或字段常量并将其名称用于隐式类型化本地的初始值设定项:

 var s4 = s2; 

但是没有办法绕过它; short必须出现在某个地方 ,无论是在字段或本地声明中还是在演员表中。

C#中的short数据类型没有后缀。 如果希望整数文字为short,则需要显式声明类型并提供范围内的文字。

 short s = 123; 

两种选择; 既不理想:

  1. 删除var ,明确指定类型:

     short s = 123; 
  2. 使用强制转换语法(注意这是一个编译时操作,而不是运行时):

     var s = (short)123; 

这是指定文字短片的唯一选项。

您可以使用以下内容:

 var value = (short)123; 

当然它并没有真正意义,因为var的重点不是写类型。

没有这样的东西Implicitly const所以你必须将你的const定义为这样的短:

 const short x = 999; 

在这里看到更多