c# - LINQ ToDictionary 来自匿名对象的枚举
问题描述
此 LINQ 语句中的 ToDictionary() 方法调用需要参数。就目前而言,ToDictionary 部分是红色波浪线,因为缺乏更好的技术术语。错误:没有重载需要 0 个参数。是的,我知道。
我无法将 lambdas 添加到 ToDictionary 方法调用,因为 Intellisense 正在用它的建议覆盖我的 lambda。换句话说,如果我输入“x”,它会用 XmlReader 替换它。啊。
我已经尝试过使用和不使用 AsEnumerable。我从 StackOverflow 帖子中借用了大部分代码,但我添加了字典部分。
我在某处缺少括号还是什么?哈哈!
var props = (from p in _type.GetProperties()
let attr = p.GetCustomAttribute<ExcelExportAttribute>()
where attr != null && attr.ReportId.ToString() == reportID
select new {Prop = p, Att = attr })
.AsEnumerable()
.ToDictionary<PropertyInfo, ExcelExportAttribute>();
VS 中的错误
严重性代码描述项目文件行抑制状态错误 CS1929“IEnumerable<>”不包含“ToDictionary”的定义,最佳扩展方法重载“Enumerable.ToDictionary(IEnumerable,Func,IEqualityComparer)”需要“IEnumerable”类型的接收器WFG.UtilityLib.Excel C:\Users\kbessel\source\repos\WFG.UtilityLib.Excel\WFG.UtilityLib.Excel\ExcelExport.cs 142 活动
解决方案
您需要完全省略泛型类型,如下所示:
.ToDictionary(x => x.Prop, x => x.Att);
原因是扩展方法不需要两个而是三个泛型类型:一个用于“this”参数,另外两个用于“常规”参数 - 或者没有,因为编译器可以从参数派生类型。
您可以显式指定所有 3 种类型,但这几乎没有任何用途,因为它们可以自动派生。
推荐阅读
- javascript - 如何将文本变成数字?
- ansible - Ansible:变量已定义,但错误显示未定义
- android - Kotlin:使异步调用同步的 runBlocking 被忽略
- java - Java 动态绑定与方法匹配。这些方法如何匹配/绑定?
- vb.net - 我希望我的数据库不填满 RAM。如何处理当前未查看的图像?
- python - 创建一个在调用另一个类函数时调用的类函数 Python
- java - 如何使用 Java Android API 发现连接到我的路由器的设备
- python - 更新字典中的键值
- javascript - 无法在 React 中使用 Material UI 实现表单验证
- java - 项目中启用 spring-boot-maven-plugin 的类不能导入到其他模块