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

时间:2011-12-29 16:34:07

标签: c# c#-4.0

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

var d = (decimal)1.23;

我可以写如下:

var d = 1.23M;

有没有办法写这个

   var s  = SomeLiteralWithoutCast

所以s暗示是短的int?

6 个答案:

答案 0 :(得分:115)

简短回答,。在C#中,没有可用作S的字母var a = 123S,表明a的类型为shortLlongFfloatDdoubleMdecimal,< strong>但不是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;

答案 1 :(得分:24)

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

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

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

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

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

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

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

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

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

short s1 = 123;

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

const short s2 = 123;

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

var s3 = (short)123;

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

var s4 = s2;

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

答案 2 :(得分:9)

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

short s = 123;

答案 3 :(得分:8)

两种选择;既不理想:

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

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

    var s = (short)123;
    
  3. 这是指定文字短片的唯一选项。

答案 4 :(得分:2)

您可以使用以下内容:

var value = (short)123;

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

答案 5 :(得分:0)

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

const short x = 999;

查看更多here