2015-12-28 4 views
0

В стандарте 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 но компилятор не компилирует. Выпустить ошибку.

С уважением Я не могу понять, как это правило работает!

+0

В этом случае преобразование не требуется, так как оба 'i' и' j' являются одним и тем же типом 'int []'. Размерность и тип элемента одинаковы. –

+1

Правило, которое вы цитируете, просто не применяется здесь. Вместо этого вы должны посмотреть на это: ** 6.1.1 Преобразование идентичности ** Преобразование идентичности преобразуется из любого типа в тот же тип. Это преобразование существует таким образом, что сущность, которая уже имеет требуемый тип, может считаться конвертируемой в этот тип. – PetSerAl

+0

@PetSerAl, но если я не могу сделать k = j, если j короткий [] j, а k - int [] k, то все преобразования массивов являются преобразованием импликации преобразования идентичности типов! – xdevel2000

ответ

0
  1. Ваши массивы имеют одинаковые типы элементов.
  2. Ваши массивы имеют значения в своих элементах.
  3. Ваши массивы имеют те же размеры - один.
  4. Multi-dimensional arrays выглядит следующим образом: int[,,] (3 штуки).
2

Оба и k - это те же типы. Есть как целочисленный массив, так и оба они имеют одно измерение. Таким образом, массив полностью соответствует правилам.

Этих неправильное usings массивов, как описано в документации:

object[] j; int[] k; 

int[,] j; int[] k; 

float[] j; int[] k; 
0

S и Т относится к типу массивов. В этом случае j и k оба типа int[], поэтому нет неявного преобразования, потому что они одного типа.

Поскольку они не отличаются по типу элементов, их размеры не имеют значения.

+0

«непочтительный» :-) –

+0

Ха-ха, спасибо, авто правильно. – AustinWBryan

1

Что делает этот код является то, что он делает и k и j указывают на тот же массив, { 1, 2 }

, так как k и j массивы с одинаковым числом габаритах и ​​того же типа элемента, вы можете сделать один указывайте на другой, используя этот код

Смежные вопросы