具有LINQ和动态继承的C#编译错误
考虑下面的代码(为了这个测试,它不做任何特殊用途-它只是演示发生的错误) 这种情况发生了具有LINQ和动态继承的C#编译错误,c#,linq,inheritance,compiler-errors,C#,Linq,Inheritance,Compiler Errors,考虑下面的代码(为了这个测试,它不做任何特殊用途-它只是演示发生的错误) 这种情况发生了 关于是什么导致了这个问题,或者如何解决它,有什么想法吗?我相信我已经缩小了对LinqWhere扩展方法的绑定范围 这项工作: d.AsEnumerable() .Where(o => o.Key.Contains("b")) .ToList() .ForEach(i => Console.WriteLine(i.Value)); 这是可行的(静态调用扩展方法)
关于是什么导致了这个问题,或者如何解决它,有什么想法吗?我相信我已经缩小了对Linq
Where
扩展方法的绑定范围
这项工作:
d.AsEnumerable()
.Where(o => o.Key.Contains("b"))
.ToList()
.ForEach(i => Console.WriteLine(i.Value));
这是可行的(静态调用扩展方法):
但这并不是:
d.Where(o => o.Key.Contains("b"))
.ToList()
.ForEach(i => Console.WriteLine(i.Value));
如果我调用静态扩展方法而不使用AsEnumerable()
:
我得到了更好的编译器错误:
参数1:无法从'UserQuery.CustomDictionary'
转换为'System.Collections.Generic.IEnumerable'
因此,出于某种原因,编译器无法将继承的类绑定到扩展方法
以下方法也有效:
- 显式地将
强制转换为d
IEnumerable
- 使用
而不是对象
动态
CustomDictionary d = new CustomDictionary()
{
{ "a", 123 },
{ "b", Guid.NewGuid() },
{ "c", "Hello World" }
};
d.Where(o => o.Key.Contains("b")).ForEach(i => Console.WriteLine(i.Value));
d.AsEnumerable()
.Where(o => o.Key.Contains("b"))
.ToList()
.ForEach(i => Console.WriteLine(i.Value));
Enumerable.Where(d.AsEnumerable(),o => o.Key.Contains("b"))
.ToList()
.ForEach(i => Console.WriteLine(i.Value));
d.Where(o => o.Key.Contains("b"))
.ToList()
.ForEach(i => Console.WriteLine(i.Value));
Enumerable.Where(d,o => o.Key.Contains("b"))
.ToList()
.ForEach(i => Console.WriteLine(i.Value));