.NET 4.0 中动态语言运行时有哪些限制?

发布于 2024-07-25 05:45:15 字数 58 浏览 2 评论 0原文

我知道不支持匿名函数作为动态方法调用的参数。 .NET 4.0 中的 DLR 还有哪些其他此类限制?

I know that anonymous functions are not supported as arguments to a dynamic method call. What are other such limitations of DLR in .NET 4.0?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一念一轮回 2024-08-01 05:45:15

可以使用匿名函数,只需首先对它们进行强制转换:

dynamic list = new List<string>() { "10", "20" };
dynamic converted = list.ConvertAll((Func<string, int>) (x => int.Parse(x)));

方法组转换也是如此:

foo.Click += (EventHandler) MyClickHandler;

到目前为止我遇到的其他限制:

  • 静态方法和构造函数不能是动态的类型,但可以就参数而言是动态的
  • 您不能在类型约束中使用dynamic
  • 您不能使用dynamic< /code> 作为类声明的接口中的类型参数,但您可以将其用作基类的类型参数,即

    类无效:IEnumerable 
      类有效:列表<动态> 
      

  • 扩展方法在执行时不可发现(但您可以使用动态参数直接调用静态方法)

  • 4.0b1 中存在一个错误,您无法从 dynamic[] 转换为 IEnumerable - 该问题将在该版本中修复。
  • 您不能使用 dynamic 作为基类

(请注意,这些是 C# 4.0 的限制,就像 DLR 本身的限制一样。我的印象是您的意思就是这样。)

You can use anonymous functions, you just have to cast them first:

dynamic list = new List<string>() { "10", "20" };
dynamic converted = list.ConvertAll((Func<string, int>) (x => int.Parse(x)));

The same is true of method group conversions:

foo.Click += (EventHandler) MyClickHandler;

Other restrictions I've encountered so far:

  • Static methods and constructors can't be dynamic in terms of the type, but can be dynamic in terms of the arguments
  • You can't use dynamic in a type constraint
  • You can't use dynamic as a type argument in an interface for a class declaration, but you can use it as a type argument for a base class, i.e.

    class Invalid : IEnumerable<dynamic>
    class Valid : List<dynamic>
    
  • Extension methods aren't discoverable at execution time (but you can call the static method directly with dynamic arguments)

  • There's a bug in 4.0b1 such that you can't convert from dynamic[] to IEnumerable<dynamic> - that will be fixed for the release.
  • You can't use dynamic as a base class

(Note that these are limitations of C# 4.0 as much as of the DLR itself. I got the impression that was what you meant though.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文