下面是一些 linqpad 测试代码。当它运行时会出错,因为“item”的第二个实例有一个空的子项目列表,而不是一个空列表。
我想以完全相同的方式处理这两种情况(空列表或空列表),但我想知道是否有比仅在列表上进行空检查并在有空时初始化空列表更简洁的方法。
换句话说,我可以这样做:
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 并以相同的方式处理空值吗?
干杯,克里斯