【问题标题】:Dynamic Key word C# 4.0动态关键字 C# 4.0
【发布时间】:2010-11-25 11:11:31
【问题描述】:

我有一个属性声明为动态类型

 public dynamic Data {get;set;}

稍后在某些方法中,数据类型变为 System.Collections.Generic.List 所以如果使用 Data.AsQueryable() 我得到“System.Collections.Generic.List<Entity1 不包含'AsQueryable'的定义”错误。

结果必须转换为 Iqueryble,我正在使用 Dynamic.Linq 中定义的方法。

我应该怎么做?

【问题讨论】:

  • 好的。很高兴听到它对您有用。
  • 只是说; dynamic 可能被严重过度使用...这可能是其中之一。

标签: c# generics c#-4.0


【解决方案1】:

目前,dynamic 不适用于扩展方法。

7.6.5.2 扩展方法调用

...如果正常处理 调用发现不适用 方法,尝试处理 作为扩展方法的构造 调用。如果 expr 或任何参数 具有编译时类型动态, 扩展方法将不适用

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

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

【讨论】:

  • 太棒了,非常感谢,这个网站对于初学者来说真的是一个很好的资源
  • @Daniel Joseph:干杯。也许在该语言的某个未来版本中,您当前的代码“可以正常工作”。
猜你喜欢
  • 2011-05-08
  • 2010-10-01
  • 2010-09-22
  • 1970-01-01
  • 2011-01-19
  • 2010-10-24
  • 2011-02-10
  • 2014-07-10
  • 1970-01-01
相关资源
最近更新 更多