我想从列表中创建一个字典,所以我会用这样的方式:字典将空键
Dictionary<long, List<MyType>> miDicIdMyType = myList.GroupBy(x => x.ForeignKey)
.ToDictionary(x => x.Key, x => x.ToList());
的问题是,有时该属性可以为空,这样我就可以创建字典,因为字典不允许空值作为键。
但在这种特殊情况下,我必须检查该属性是否为null,如果它为null,则抛出异常,因为这是一个错误。在这个特定的方法中,我希望列表中的所有项目在此属性中都不为空。
所以,我可以这样做:
Dictionary<long, List<MyType>> miDicIdMyType = myList.GroupBy(x => (long)x.ForeignKey)
.ToDictionary(x => x.Key, x => x.ToList());
这是一个强制转换为长,但如果是空的,我会得到一个错误。所以基本上我想这样做:
Dictionary<long, MyType> myDic = new Dictionary<long, myType>();
foreach (Mytype iterator in miList)
{
if (iterator.ForeignKey == null)
{
throw new ArgumentNullException("Some items in the collection has null value and it is not expected.");
}
if (myDic.ContainsKey(iterator.ForeignKey) == false)
{
myDic.Add(iterator.ForeignKey, new List<MyType>());
}
myDic[iterator.ForeignKey].Add(iterator);
}
我想知道这是否是一个好的代码或我可以做一个更好的方式,与LINQ或lambda表达式或任何其他方式。我的意思是,简化我的代码。
你可以重构'X => x.ForeignKey'到一个多拉姆达expession'Func键'和的情况下,抛出一个异常'T.ForeignKey'是* NULL *。 –
user3185569
另一种选择是'Dictionary>'。 –