下面是一些linqpad測試代碼。當它運行錯誤時,因爲「item」的第二個實例具有與空列表相反的子列表的空列表。如何處理空列表,如linq中的空列表?
我想治療以完全相同的方式這兩種情況下(null或空單),但我想知道是否有比只是把名單上的空校驗和初始化列表爲空時,有一個空一個更清潔的方式。
換句話說,我可以這樣做:
from si in (i.subitems == null ? new List<item>() : i.subitems)
,但這是一個難看一點,我不知道我怎麼能提高呢?
public class item
{
public string itemname { get; set; }
public List<item> subitems { get; set; }
}
void Main()
{
List<item> myItemList = new List<item>()
{
new item
{
itemname = "item1",
subitems = new List<item>()
{
new item { itemname = "subitem1" },
new item { itemname = "subitem2" }
}
},
new item
{
itemname = "item2"
}
};
myItemList.Dump();
var res = (from i in myItemList
from si in i.subitems
select new {i.itemname, subitemname = si.itemname}).ToList();
res.Dump();
}
的獎金問題,可以在此相同的LINQ查詢被表示爲Lambda和處理空值以同樣的方式?
乾杯,克里斯
實際上,第二個選項是非常可讀的,並不意味着一個新的列表需要被創建只能被忽略。謝謝 – 2010-02-04 18:16:14
@Chris Simpson:自從您提出要求之後,我添加了lambda版本。查詢語法版本更可讀。 – jason 2010-02-04 18:26:16
我真的認爲where子句是最乾淨的解決方案,所以我將其標記爲答案。我只是對lambda相當好奇,但我同意,它不是可讀的。謝謝。 – 2010-02-04 18:58:55