此 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 活动
2 回答
莫回无
TA贡献1865条经验 获得超7个赞
您需要完全省略泛型类型,如下所示:
.ToDictionary(x => x.Prop, x => x.Att);
原因是扩展方法不需要两个而是三个泛型类型:一个用于“this”参数,另外两个用于“常规”参数 - 或者没有,因为编译器可以从参数派生类型。
您可以显式指定所有 3 种类型,但这几乎没有任何用途,因为它们可以自动派生。
慕田峪7331174
TA贡献1828条经验 获得超13个赞
我无法在ToDictionary方法调用中添加 lambda,因为 Intellisense 用它的建议覆盖了我的 lambda。换句话说,如果我输入“x”,它将替换为XmlReader.
这是一个需要克服的简单问题:输入x,然后按下Esc关闭 Intellisense 下拉菜单。根据需要继续键入表达式:
var props = _type.GetProperties()
.SelectMany(p => new {Prop = p, Attr = p.GetCustomAttribute<ExcelExportAttribute>()})
.Where(p => p?.ReportId?.ToString() == reportId)
.ToDictionary(p => p.Prop, p => p.Attr);
- 2 回答
- 0 关注
- 199 浏览
添加回答
举报
0/150
提交
取消