动态关键字 C# 4.0

23 浏览
0 Comments

动态关键字 C# 4.0

我有一个声明为dynamic类型的属性\n

 public dynamic Data {get;set;}

\n后来在某个方法中,数据的类型变成了System.Collections.Generic.List\n所以如果使用Data.AsQueryable(),我会得到\"System.Collections.Generic.List不包含\'AsQueryable\'的定义\"错误。\n结果必须转换为Iqueryble,并且我正在使用Dynamic.Linq中定义的方法。\n我应该如何继续进行?

0
0 Comments

动态关键字C# 4.0的问题是无法很好地与扩展方法配合使用。根据C#规范中的描述,如果对动态类型的表达式或参数进行正常处理时找不到适用的方法,会尝试将其作为扩展方法调用处理。然而,如果表达式或参数的编译时类型是动态的,扩展方法将不适用。

正如这个问题中提到的,静态上下文(适用的using指令)必须在运行时为每个动态调用提供,以确定哪些扩展方法可能适用,但目前尚未实现。

你尝试过将扩展方法作为“普通”的静态方法调用吗?例如(如果你打算调用不同的方法,请进行修改):System.Linq.Queryable.AsQueryable(Data)

很棒,非常感谢,这个网站对初学者来说真是一个很好的资源。

Joseph:谢谢。也许在将来的语言版本中,你现在的代码“只需要工作”。

0