如何指定一个短整型常量而不铸造?

有没有办法指定我的variables是一个短整型? 我正在寻找类似于M后缀小数的东西。 对于小数,我不必说

var d = (decimal)1.23; 

我只能写如下:

 var d = 1.23M; 

有没有办法写这个

  var s = SomeLiteralWithoutCast 

所以这意味着短int?

简短的回答, 没有 。 在C#中,没有可以用作var a = 123S字母S ,表示a的types是short 。 有long LFfloatDdouble floatMdecimal但不是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; 

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

一个常数expression式 (粗略地说)是编译器已知的expression式,是一个特定的常量值。

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

常量字段是用常量expression式初始化的types的成员,并可以在其他地方用作常量expression式。 Math.PI是一个常量字段的例子。

局部常量就像一个常量字段,但是被限定在一个块中。 (就像局部variables的作用域一样)

需要常量字段和局部常量来显式地声明它们的types; 常量没有“var”forms。 (这个想法让人不寒而栗,“const var”显然是一个矛盾)。

局部variables不需要说明它们的types; types可以从初始化器中推断出来。 这样一个局部variables被称为“隐式types局部variables”。

所以你的问题是“有没有办法编写一个shorttypes的文字常量expression式,可以用来初始化一个隐式types的shorttypes局部variables?

不,那里没有。 您可以显式键入本地variables:

 short s1 = 123; 

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

 const short s2 = 123; 

或者你可以做一个常量expression式,包含一个强制转换:

 var s3 = (short)123; 

或者你可以创build一个本地或者字段常量,并且使用它的名称作为隐式types化本地的初始值设定项:

 var s4 = s2; 

但是没有办法解决这个问题。 short必须出现在某个地方 ,无论是在田间还是在当地的宣言或演员。

C#中的short数据types没有后缀。 如果你想要一个整型文本是一个简短的,你需要明确说明types,并提供一个在范围内的文字。

 short s = 123; 

两种select; 既不理想:

  1. 删除var ,明确指定types:

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

     var s = (short)123; 

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

您可以使用以下内容:

 var value = (short)123; 

当然,因为var的全部不是写这个types,所以它没有任何意义。

有没有这样的事情Implicitly const所以你将不得不定义你的const这样简短:

 const short x = 999; 

在这里看到更多