如何指定一个短整型常量而不铸造?
有没有办法指定我的variables是一个短整型? 我正在寻找类似于M后缀小数的东西。 对于小数,我不必说
var d = (decimal)1.23;
我只能写如下:
var d = 1.23M;
有没有办法写这个
var s = SomeLiteralWithoutCast
所以这意味着短int?
简短的回答, 没有 。 在C#中,没有可以用作var a = 123S
字母S
,表示a
的types是short
。 有long
L
, F
为float
, D
为double
float
, 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;
这个问题有点令人困惑。 我们来定义一些术语:
一个常数expression式 (粗略地说)是编译器已知的expression式,是一个特定的常量值。
文字是一种特殊的常量expression; 123
和Math.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; 既不理想:
-
删除
var
,明确指定types:short s = 123;
-
使用强制转换语法(注意这是一个编译时操作,而不是运行时):
var s = (short)123;
这是指定短文字的唯一选项。
您可以使用以下内容:
var value = (short)123;
当然,因为var的全部不是写这个types,所以它没有任何意义。
有没有这样的事情Implicitly const
所以你将不得不定义你的const这样简短:
const short x = 999;
在这里看到更多