2015-10-06 19 views
5

mam ten kod:Jak zrobić int tablica Nullable?

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

W tej linii:

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

otrzymuję ten błąd:

Can not implicitly convert type int[] to int

co próbuję zrobić, to zrobić typ contractsIDList pustych.

Jak zrobić int tablicę Nullable?

+4

[C# tablice dopuszczające wartość null] (http://stackoverflow.com/questions/16069997/c-sharp-nullable-arrays) –

+0

Dlaczego chcesz mieć tablicę zerową? Jako typ odniesienia jest już nullable. –

+0

Nie rozumiem komunikatu o błędzie. Czy 'x.Id' jest' int? 'Lub' int'? Czy rzeczywiście chcesz utworzyć 'int? []' Z 'int []'? –

Odpowiedz

9

Błąd ty powinien pojawia się:

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

Zatem trzeba konwertować wartości:

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

IMO, wieloznaczne pytanie doprowadziło do wielu sporów. – spender

4

Najłatwiej w Twoim przypadku jest uzyskanie int? od Select:

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

Można również wyrazić jako 'contracts.Select (x => new int? (X.Id));' – stuartd

4

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

ale myślę, że rzeczywiście chcesz uzyskać int?[] z int[] (bo Id nie jest pustych). Można użyć Array.ConvertAll:

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

lub rzucać je bezpośrednio w kwerendzie LINQ:

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

Użyj tej Jeden

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

Zastanawiam się, czy Twój 100% komentarz był prawdziwy, to nie działa w ogóle. Jeśli 'contractsID' to tablica (co to jest), musisz przekazać tablicę jako parametr, nie jest to metoda instancji. –

+0

contractID to LIst? – Ramankingdom

+0

OP pokazał swój kod: 'var contractsID = contracts.Select (x => x.Id);', jest to 'IEnumerable '. –