gpt4 book ai didi

c# - Lambda 方法来填充 ToDictionary() 方法中的值字段?

转载 作者:太空狗 更新时间:2023-10-30 00:17:37 25 4
gpt4 key购买 nike

我有两个IEnumerable

IEnumerable<MyObject> allowedObjects = MyService.GetAllowedObjects();
IEnumerable<MyOBject> preferedObjects = MyService.GetPreferedObjects();

我们可以安全地假设 preferedObjects 将始终是 allowedObjects 的子集。
我想创建一个 IDictionary<MyObject, bool> .键是 allowedObjects 中的 MyObjects 集合的对象,如果 MyObject 实例也在 preferedObjects 可枚举中,则 bool 为真。

我可以通过枚举它们并一个一个地添加它们来做到这一点,但我希望能够做这样的事情:

IDictionary<MyObject, bool> selectedObjects = allowedObjects
.ToDictionary(o => new KeyValuePair<MyObject, bool>()
{ Key = q,
Value = preferedObjects.Any(q)
}
);

更新
与 Any 交换包含;建议最多的解决方案是我首先尝试的解决方案,但由于某种原因未被接受:

IDictionary<MyObject, bool> selectedObjects = allowedObjects
.ToDictionary<MyObject, bool>(o => o, preferedObjects.Any(o));

Visual Studio 表示第一个方法不返回 bool 值。这是真的,但主要是因为 bool 不是开始的正确结果......
然后它说它无法推断第二个 lambda 的类型...
如您所见,我试图明确定义类型以帮助推理,但它并没有解决任何问题..

建议?

免责声明:名称和代码被剪短以将焦点保持在应有的位置

最佳答案

我不记得 Linq 是否在 IEnumerable<T> 上提供了“包含”扩展方法。 .如果没有,您可以使用任何:

var dict = allowedObjects.ToDictionary(o => o,
o => preferredObjects.Contains(o));

** 编辑 ** 是的,刚刚测试了一下,确实有一个 Contains() 扩展方法,所以上面的代码可以工作。

关于c# - Lambda 方法来填充 ToDictionary() 方法中的值字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/905933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com