В стандарте C# написано, что exsists неявное преобразование между массивом в соответствии со следующими правилами:Неявные ссылочные преобразования между типом массива
из массива типа S с типом элемента SE к массиву типа T с тип элемента ТЕ, при условии, все из следующих условий:
- S и Т отличаются только типом элемента. Другими словами, S и T имеют одинаковое количество измерений.
, но если я делаю:
int[] j = { 1, 2 };
int[] k = { 1 };
k = j;
не ошибка компилятора не излучается. Возможно, я не понял смысла этого правила ...
- И SE, и TE являются ссылочными типами.
, но, опять же, в приведенном выше примере типа элементов j
и k
типы значений.
- Существует неявное преобразование ссылок от SE до TE.
здесь, если у меня есть:
int[] j = { 1, 2 };
short[] k = { 1, 5 };
j = k;
кажется, что может быть неявное преобразование из элемента типа short
к элементу типа int
но компилятор не компилирует. Выпустить ошибку.
С уважением Я не могу понять, как это правило работает!
В этом случае преобразование не требуется, так как оба 'i' и' j' являются одним и тем же типом 'int []'. Размерность и тип элемента одинаковы. –
Правило, которое вы цитируете, просто не применяется здесь. Вместо этого вы должны посмотреть на это: ** 6.1.1 Преобразование идентичности ** Преобразование идентичности преобразуется из любого типа в тот же тип. Это преобразование существует таким образом, что сущность, которая уже имеет требуемый тип, может считаться конвертируемой в этот тип. – PetSerAl
@PetSerAl, но если я не могу сделать k = j, если j короткий [] j, а k - int [] k, то все преобразования массивов являются преобразованием импликации преобразования идентичности типов! – xdevel2000