C#:将’0’转换为int

我看到这样的代码:

private readonly object[] m_Values = { (int)0, (int)0 }; 

将0转换为int的想法是什么? 不是’默认’的int吗?

没有必要。 我假设程序员之前被咬过了。 我会把它作为一个益智游戏发布,在这个程序中会调用哪个超载?

 using System; class Program { static void Main(string[] args) { Foo.Bar(0); Console.ReadLine(); } } class Foo { public static void Bar(byte arg) { Console.WriteLine("byte overload"); } public static void Bar(short arg) { Console.WriteLine("short overload"); } public static void Bar(long arg) { Console.WriteLine("long overload"); } } 

我认为这样做是没有意义的,但我认为唯一有用的地方是原始编码器希望阻止将该值转换为其他数据类型的地方 。 考虑这个例子:

 object[] m_Values = { (int)0, (int)0 }; Int16 item = (Int16) m_Values[0]; 

要么

 object[] m_Values = { (int)0, (int)0 }; Int64 item = (Int64)m_Values[0]; 

以上将导致

指定演员表无效。

但是下面会有效:

 object[] m_Values = { (int)0, (int)0 }; int item = (int)m_Values[0]; 

当你声明一个整数文字而不提供类型提示时,C#默认为Int32 (只要文字适合Int32 ,否则它将转到Int64 )。 从这里 :

在C#中,文字值从编译器接收类型。 您可以通过在数字末尾附加一个字母来指定数字文字的输入方式。 例如,要指定值4.56应被视为浮点数,请在数字后面附加“f”或“F”