2017-01-01 5 views
0

Lassen Sie uns sagen, ich habe ein Array mit x Mitglieder und ich möchte ein anderes Array mit der gleichen Länge (x) und den gleichen ganzzahligen Werten erstellen:Wie konvertiert man ein int-Array in ein nullbares int-Array?

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

Und ich kann das nicht tun:

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

Gibt es eine explizite Umwandlung in ein nullwertfähiges Array oder etwas, das mir nicht bekannt ist?

Ja, ich könnte einfach jeden Wert in einer Schleife konvertieren, aber ich frage, ob es schon einen einfachen kurzen Weg dafür gibt.

+3

Jede andere "syntatic sugar" -Methode endet mit dem Durchlaufen aller Elemente. Du kannst LINQ ro verwenden, du kannst 'Array.ConvertAll' verwenden. – Fabio

+0

@Fabio Ich denke OP verlangt tatsächlich nach einem syntaktischen Zucker. Warum postest du nicht die 'ConvertAll'-basierte Methode, die die beste Lösung für Arrays ist (nicht wie die aktuellen Antworten, die allgemeiner, aber auch weniger effizient sind). –

Antwort

4

Eine weitere aproach unter Verwendung Array.ConvertAll Methode

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

Oder mit der Bereitstellung ausdrücklich generische Typen verwenden könnte

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

Natürlich hat OP den kürzesten Typ gewählt, obwohl es von den drei schlechtesten gepostet wird (box + unbox). +1 –

+0

Ich war gerade dabei, Sie zu fragen, wie man es mit dem Array.Convert All und ja, ich habe wirklich vergessen Boxen und Unboxing danke – SuperMinefudge

+0

BTW ist nicht dabei: "New Int? (Wert)" Boxen aswell? – SuperMinefudge

5

Ich schlage vor, mit Linq:

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

Sie Cast von Linq

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