12

我看到了这样的代码:

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

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

4

3 回答 3

17

没有必要。我假设程序员以前被咬过。我将它作为一个谜题发布,在这个程序中将调用哪个重载?

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"); }
}
于 2013-05-09T10:31:41.420 回答
5

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

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];
于 2013-05-09T07:29:28.823 回答
0

C# 默认Int32情况下声明整数文字而不提供类型提示(只要文字适合Int32,否则它将转到Int64)。从这里

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

于 2013-05-09T07:30:25.527 回答