2015-09-22 100 views
3

如何將int array轉換爲nullable int array而不循環播放元素?如何將int數組轉換爲nullable int數組而不循環元素?

project.Suppliers = project.ProjectSuppliers.Select(proj => proj.ProjectSupplier).ToArray(); 
在上面的代碼

我想分配給project.ProjectSuppliers.Select(proj => proj.ProjectSupplier).ToArray();可空數組project.Suppliers但我不能,因爲它可以爲空那麼什麼是這樣做沒有遍歷一個元素的最佳途徑之一。

+0

目的是什麼,它們都不會爲空。然後,供應商模型似乎又不一致。它應該是supplierid的?爲什麼在那裏看起來很奇怪。 – Wouter

+0

該項目可能沒有任何供應商。 – user3260672

+0

在這種情況下,數組爲空或空,但元素仍然是int的 – Wouter

回答

8

兩個選項:

project.Suppliers = project.ProjectSuppliers 
    .Select(proj => (int?)proj.ProjectSupplier) 
    .ToArray(); 

使用Cast<>()

演員在SELECT語句中的項

project.Suppliers = project.ProjectSuppliers 
    .Select(proj => proj.ProjectSupplier) 
    .Cast<int?>() 
    .ToArray(); 

使用LINQ to對象時,第一個選項將可能有表現略好,它可能會有更少的驚喜。 (有些類型重載運營商在代碼中顯式轉換,但Cast<>()會拋出異常的相同的轉換,因爲它的內部代碼不知道這些類型是在編譯時。)

第二種選擇是更簡潔時你有一個預編碼的IEnumerable<>IQueryable<>,你不想爲此目的創建一個完整的Select()聲明。

我還應該注意,當你使用LINQ to Objects時,它們都會迭代給定的集合。您不能將一種類型的數組轉換爲C#中另一種類型的數組,因爲在運行時,每個數組實例都知道它所持有的對象類型以及這些對象每個需要佔用多少空間。這些方法只是給你一個很好的鏈式語法,而不需要for循環。

+1

這是一個很好的答案,非常感謝 – user3260672