Vac*_*ano 5 .net c# collections extension-methods dictionary
标题类型说明了一切.我似乎无法找到一个DictionaryOrDefault\ ListOrDefault\ CollectionOrDefault选项.
有这样的方法吗?如果不是我该怎么做:
MyClass myObject = MyDictionary
.SingleOrDefault(x =>
{
if (x.Value != null)
return (x.Value.Id == sourceField.SrcField.Id);
else
return false;
}).Key;
Run Code Online (Sandbox Code Playgroud)
如果有多个比赛?(我得到了一个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;
Run Code Online (Sandbox Code Playgroud)
然后,如果您绝对需要将其作为列表,您可以调用
res.ToList();
Run Code Online (Sandbox Code Playgroud)
请注意,如果您实际上正在操作Dictionary<TKey, TValue>,res将包含KeyValuePair<TKey, TValue>'s。
| 归档时间: |
|
| 查看次数: |
3096 次 |
| 最近记录: |