2015-10-06 14 views
5

tôi có mã này:Làm thế nào để làm cho mảng int Nullable?

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

Trong dòng này:

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

tôi nhận được lỗi này:

Can not implicitly convert type int[] to int

những gì tôi cố gắng làm là làm cho contractsIDList Nullable loại.

Làm thế nào để tạo mảng int Nullable?

+4

[C# Nullable mảng] (http://stackoverflow.com/question/16069997/c-sharp-nullable-arrays) –

+0

Tại sao bạn muốn một mảng nullable? Là một kiểu tham chiếu, nó đã là nullable. –

+0

Tôi không hiểu thông báo lỗi. Có phải 'x.Id' là' int? 'Hay' int'? Bạn có thực sự muốn tạo một 'int? []' Từ một 'int []'? –

Trả lời

9

Các lỗi bạn nên get là:

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

Vì vậy bạn cần phải chuyển đổi các giá trị:

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

IMO, một câu hỏi mơ hồ đã dẫn đến rất nhiều bất đồng. – spender

4

Cách đơn giản nhất trong trường hợp của bạn là để có được int? từ Select:

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

Cũng có thể được diễn tả dưới dạng 'contract.Select (x => new int? (X.Id)); ' – stuartd

4

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

Nhưng tôi đoán rằng bạn thực sự muốn nhận được int?[] từ số int[] (vì Id không thể vô hiệu). Bạn có thể sử dụng Array.ConvertAll:

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

hoặc cast nó trực tiếp trong truy vấn LINQ:

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

Sử dụng này Một

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

Tôi tự hỏi nếu bình luận 100% của bạn là đúng, nó không hoạt động chút nào. Nếu 'contractID' là một mảng (nó là gì), bạn cần truyền mảng như tham số, nó không phải là một phương thức thể hiện. –

+0

contractID là LIST? – Ramankingdom

+0

OP đã cho thấy mã của mình: 'var contractID = contracts.Select (x => x.Id);', đó là một 'IEnumerable '. –

Các vấn đề liên quan