有没有办法指定我的变量是short int?我正在寻找类似于M后缀的小数。对于小数,我不必说
var d = (decimal)1.23;
我可以这样写:
var d = 1.23M;
有没有办法写这个
var s = SomeLiteralWithoutCast
所以s暗示是int的缩写?
有没有办法指定我的变量是short int?我正在寻找类似于M后缀的小数。对于小数,我不必说
var d = (decimal)1.23;
我可以这样写:
var d = 1.23M;
有没有办法写这个
var s = SomeLiteralWithoutCast
所以s暗示是int的缩写?
Answers:
简短的回答,不。在C#中,没有S
可以使用的字母,因为var a = 123S
这表明a
类型是short
。有L
对long
,F
对float
,D
对double
,M
对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;
这个问题有点令人困惑。让我们定义一些术语:
甲常量表达式被(粗略地说)编译器知道的一个表达式是一个特定的恒定值。
甲字面是一种特定类型的常量表达式; 123
和Math.PI
都是常量表达式。前者不是字面意思,后者不是。
甲常数字段是与一个常量表达式初始化的类型的成员,并且然后可以在其他地方用作常量表达式。Math.PI
是常量字段的示例。
一个局部常量就像一个恒定的领域,但作用范围的块。(就像局部变量的作用域是块一样。)
需要常量字段和局部常量来明确声明其类型;没有常量的“ var”形式。(这个想法使人不寒而栗;“ const var”显然是矛盾的。)
不需要局部变量来说明其类型;可以从初始化程序中推断出类型。这样的局部变量称为“隐式类型局部变量”。
因此,您的问题是“是否有一种方法可以编写可用于初始化short类型的隐式类型局部变量的short类型的文字常量表达式?”
不,那里没有。您可以显式键入局部变量:
short s1 = 123;
您可以显式键入局部常量:
const short s2 = 123;
或者,您可以创建一个包含强制转换为short的常量表达式:
var s3 = (short)123;
或者,您可以使local或field常量并将其名称用作隐式键入的local的初始化程序:
var s4 = s2;
但是没有办法解决它。short
必须出现在字段,本地声明或演员表中的某个位置。
M((short)123)
但不强制转换。与成本相比,在这种情况下消除强制转换的好处很小。(在那种情况下,转换可以说是更好的,因为它使调用哪个重载变得非常清晰。)
short x = y < 0 ? (short)0 : (short)y
清洁(short x = y < 0 ? 0S : (short)y
)
short
C#中的数据类型没有后缀。如果希望整数文字短,则需要显式声明类型并提供范围内的文字。
short s = 123;
const short foo = SOMEVALUE;
。在十进制声明的上下文中查看它,我相信您会得出相同的结论。
const
。
两种选择;都不理想:
删除var
,明确指定类型:
short s = 123;
使用强制转换语法(请注意这是一个编译时操作,而不是运行时):
var s = (short)123;
这是指定文字缩写的唯一选项。