c# - Dictionary<T> 的 SingleOrDefault 集合版本是什么?

标签 c# .net collections dictionary extension-methods

标题说明了一切。我似乎找不到 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/

相关文章:

c# - 如何在mvc中获取复选框值?

c# - 在 C# 中调试 Windows 服务调用的 WCF 服务

c# - Directory.Move(): Access to Path is Denied

.net - XBAP - 此应用程序类型已被禁用

.net - 类型 XX 存在于两个 DLL 中

java - 从另一个列表更新列表

java - 为什么priorityQueue不对元素进行排序

c# - 在 controllerContext 之外渲染 View

c# - 从动态加载程序集创建对象并将其转换为接口(interface) (.NET 2.0)

sorting - IComparable 排序等效于 VB6