标题说明了一切。我似乎找不到 DictionaryOrDefault
\ListOrDefault
\CollectionOrDefault
选项。
有这样的方法吗?如果不是,我该怎么做:
MyClass myObject = MyDictionary
.SingleOrDefault(x =>
{
if (x.Value != null)
return (x.Value.Id == sourceField.SrcField.Id);
else
return false;
}).Key;
如果有多个匹配项? (我得到一个 execption,因为 SingleOrDefault 仅适用于单个结果(想象一下!)。)
我想我需要更清楚(尽管 where
答案看起来不错)。
我有上面的说法。我更改了我的程序,使其不总是返回 1(可以有多个值与一个键匹配)。那失败了,所以我正在寻找要返回的集合(而不是只有一件)。
最佳答案
您可以使用 IEnumerable<T>.FirstOrDefault(Func<T, bool> predicate)
如果您打算返回与谓词匹配的第一个。
否则你只是在看IEnumerable<T>.Where(Func<T, bool> predicate)
linq 扩展,它将返回与传递的谓词匹配的所有元素。这将返回一个空的 IEnumerable<T>
如果没有元素与谓词匹配,此时如果您确实需要该值为 null,则可以查看其中是否有任何内容。
var res = MyDictionary.Where(x =>
{
if (x.Value != null)
return (x.Value.Id == sourceField.SrcField.Id);
return false;
});
if (!res.Any())
res = null;
然后如果你绝对需要把它作为一个列表,你可以调用
res.ToList();
请注意,如果您实际操作的是 Dictionary<TKey, TValue>
, res
将包含 KeyValuePair<TKey, TValue>
的。
关于c# - Dictionary<T> 的 SingleOrDefault 集合版本是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2189509/