2015-10-06 17 views
5

Ho questo codice:Come rendere int array Nullable?

var contractsID = contracts.Select(x => x.Id); 
int?[] contractsIDList = contractsID.ToArray();//for debug 

In questa linea:

int?[] contractsIDList = contractsID.ToArray();//for debug 

ottengo questo errore:

Can not implicitly convert type int[] to int

quello che cerco di fare è quello di rendere tipo contractsIDList Nullable.

Come rendere int array Nullable?

+4

[array C# Nullable] (http://stackoverflow.com/questions/16069997/c-sharp-nullable-array) –

+0

Perché vuoi un array nullable? Come tipo di riferimento è già annullabile. –

+0

Non capisco il messaggio di errore. 'X.Id' un' int? 'O un' int'? Realmente vuoi creare un 'int? []' Da un 'int []'? –

risposta

9

L'errore si dovrebbe get è:

Can not implicitly convert type int[] to int?[]

Quindi è necessario convertire i valori:

int?[] contractsIDList = contractsId.Cast<int?>().ToArray();//for debug 
+1

IMO, una domanda ambigua ha portato a un sacco di disaccordo. – spender

4

Il modo più semplice nel tuo caso è quello di ottenere int? dal Select:

var contractsID = contracts.Select(x => (int?)x.Id); 
int?[] contractsIDList = contractsID.ToArray(); 
+1

Potrebbe anche essere espresso come 'contracts.Select (x => new int? (X.Id));' – stuartd

4

Arrays are always reference types - so they're already nullable.

ma credo che si vuole realmente ottenere un int?[] da un int[] (perché il Id non è annullabile). È possibile utilizzare Array.ConvertAll:

int[] contractsID = contracts.Select(x => x.Id).ToArray(); 
int?[] contractsIDList = Array.ConvertAll(contractsID, i => (int?)i); 

o gettati direttamente nella query LINQ:

int?[] contractsIDList = contracts.Select(x => (int?) x.Id).ToArray(); 
1

Utilizzare questa Uno

int?[] contractsIDList = contractsID.ConvertAll<int?>((i) => { int? ni = i; return ni; }).ToArray(); 
+0

Mi chiedevo se il tuo commento al 100% fosse vero, non funziona affatto. Se 'contractsID' è un array (che cos'è) è necessario passare l'array come parametro, non è un metodo di istanza. –

+0

contractID è LIst? – Ramankingdom

+0

OP ha mostrato il suo codice: 'var contractsID = contracts.Select (x => x.Id);', è un 'IEnumerable '. –