2017-01-01 4 views
0

Скажем, у меня есть массив, содержащий x членов, и я хочу, чтобы создать еще один массив той же длины (x) и тех же целочисленных значений:Как преобразовать массив int в нулевой массив int?

int[] arr = new int[x]; 
int?[] nullable_arr = arr; 

И я не могу это сделать:

int?[] arr = new int[x]; 

Является ли явное преобразование в массив типа NULL или что-то, о чем я не знаю?

Да, я мог бы просто преобразовать каждое значение в цикле, но я спрашиваю, есть ли у него простой способ сделать это.

+3

Любой другой метод «синтаксического сахара» будет проходить через все элементы. Вы можете использовать LINQ ro, вы можете использовать 'Array.ConvertAll' – Fabio

+0

@Fabio Я думаю, что OP действительно просит синтаксический сахар. Почему бы вам не опубликовать ответ на основе метода ConvertAll, который будет лучшим решением для массивов (не так, как текущие ответы, которые являются более общими, но также менее эффективными). –

ответ

4

Другой ПОДХОД с помощью Array.ConvertAll метода

var values = new[] {1, 2, 3, 4}; 
var nullableValues = Array.ConvertAll(ints, value => new int?(value)); 

Или с предоставлением универсальных типов в явном виде

var nullableValues = Array.ConvertAll<int, int?>(ints, value => value); 
+0

Конечно, OP выбрал самый короткий тип, хотя он хуже из трех размещенных (box + unbox). +1 –

+0

Я как раз собирался спросить вас, как это сделать с Array.Convert All и да, я действительно забыл о боксе и распаковке спасибо – SuperMinefudge

+0

btw isnt делает это: «новый int? (Value)» бокс? – SuperMinefudge

5

Я предлагаю использовать Linq:

int?[] nullable_arr = arr 
    .Select(item => new int?(item)) 
    .ToArray(); 
4

Вы можете использовать Cast из Linq

int?[] arrNull = arr.Cast<int?>().ToArray();