C# - 常量值'4294901760'无法转换为'int'

swi*_*ter 7 c# windows-phone-7

问候,

我不敢相信我问这样一个基本问题,但它没有意义,所以这里是:).

在Windows Phone 7/.net上的C#中,我试图在类中定义一个常量,如下所示:

// error CS0266: Cannot implicitly convert type 'uint' to 'int'. 
// An explicit conversion exists (are you missing a cast?)
public const int RED = 0xffff0000;
Run Code Online (Sandbox Code Playgroud)

如果我像这样放一个(int)演员,我得到另一个错误:

// error CS0221: Constant value '4294901760' cannot be converted to a 'int' 
// (use 'unchecked' syntax to override)        
public const int RED = (int)0xffff0000;
Run Code Online (Sandbox Code Playgroud)

但我知道我的int是32位,因此范围为-2,147,483,648到2,147,483,647,请参阅http://msdn.microsoft.com/en-us/library/5kzh1b5w(v=vs.80).aspx

什么给出了什么?

提前致谢!

Aak*_*shM 18

如您Int32所知,范围是-2,147,483,648到2,147,483,647,因此可以保留该范围内的任何数字,但只能保留该范围内的数字.4,294,901,760大于2,147,483,647,因此不适合Int32.

该怎么做取决于你想要达到的目标.如果您只想要一个Int32带位模式ffff0000,那么建议使用unchecked:

int y = unchecked((int)0xffff0000);
Run Code Online (Sandbox Code Playgroud)

y 现在具有值-65536,这是将位模式解释为有符号整数.

然而!如果你真的想要值4,294,901,760,你应该使用适合它的数据类型 - 所以UInt32.