Я видел такой код:
private readonly object[] m_Values = { (int)0, (int)0 };
Какую идею следует отличать от 0 до int? Разве это не 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];
С# по умолчанию имеет значение Int32
, когда вы объявляете целочисленный литерал без предоставления подсказки типа (пока литерал вписывается в Int32
, в противном случае он перейдет к Int64
).
Из здесь:
В С# литеральные значения получают тип от компилятора. Вы можете указать, как ввести числовой литерал, добавив букву в конец номера. Например, чтобы указать, что значение 4.56 следует рассматривать как float, добавьте "f" или "F" после номера