ser*_*0ne 16 c# linq inheritance compiler-errors
考虑以下代码(为了这个测试,它没有做任何特殊用途 - 它只是为了演示发生的错误)
Dictionary<string, dynamic> d = new Dictionary<string, dynamic>()
{
{ "a", 123 },
{ "b", Guid.NewGuid() },
{ "c", "Hello World" }
};
d.Where(o => o.Key.Contains("b")).ForEach(i => Console.WriteLine(i.Value));
//retuns the Guid value, as expected.
Run Code Online (Sandbox Code Playgroud)
我想Dictionary<string, dynamic>使用继承包装:
public class CustomDictionary : Dictionary<string, dynamic>
{
}
Run Code Online (Sandbox Code Playgroud)
以下是使用此派生类的上述检查:
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));
Run Code Online (Sandbox Code Playgroud)
有时候是这样的...


关于导致问题的原因或如何解决问题的任何想法?
我相信我已经缩小了与 Linq 扩展方法的绑定范围Where。
这有效:
d.AsEnumerable()
.Where(o => o.Key.Contains("b"))
.ToList()
.ForEach(i => Console.WriteLine(i.Value));
Run Code Online (Sandbox Code Playgroud)
这是可行的(静态调用扩展方法):
Enumerable.Where(d.AsEnumerable(),o => o.Key.Contains("b"))
.ToList()
.ForEach(i => Console.WriteLine(i.Value));
Run Code Online (Sandbox Code Playgroud)
但这并没有:
d.Where(o => o.Key.Contains("b"))
.ToList()
.ForEach(i => Console.WriteLine(i.Value));
Run Code Online (Sandbox Code Playgroud)
如果我调用静态扩展方法而不使用AsEnumerable():
Enumerable.Where(d,o => o.Key.Contains("b"))
.ToList()
.ForEach(i => Console.WriteLine(i.Value));
Run Code Online (Sandbox Code Playgroud)
我得到更好的编译器错误:
参数 1:无法从 转换
'UserQuery.CustomDictionary'为'System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string,dynamic>>'
因此由于某种原因,编译器无法将继承的类绑定到扩展方法。
以下方法也有效:
d为IEnumerable<System.Collections.Generic.KeyValuePair<string,dynamic>>object而不是dynamic| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |