在C#中创建动态扩展方法?

是否可以解决此错误:

public static class LayoutExtensions { ///  /// Verifies if an object is DynamicNull or just has a null value. ///  public static bool IsDynamicNull(this dynamic obj) { return (obj == null || obj is DynamicNull); } 

编译时间

 Error: The first parameter of an extension method cannot be of type 'dynamic' 

不,请访问https://stackoverflow.com/a/5311527/613130

使用dynamic对象时,无法通过“扩展方法语法”调用扩展方法。 说清楚:

 int[] arr = new int[5]; int first1 = arr.First(); // extension method syntax, OK int first2 = Enumerable.First(arr); // plain syntax, OK 

这两个都没问题,但有dynamic

 dynamic arr = new int[5]; int first1 = arr.First(); // BOOM! int first2 = Enumerable.First(arr); // plain syntax, OK 

如果您知道dynamic对象的工作原理,这是合乎逻辑的 dynamic变量/ field / …只是一个object变量/ field / …(加上一个属性),C#编译器知道它应该被视为dynamic 。 “视为动态”意味着什么? 这意味着生成的代码,而不是直接使用变量,使用reflection在对象的类型内搜索所需的方法/属性/ …(所以在这种情况下,在int[]类型内)。 很明显,reflection不能绕过所有加载的程序集,以寻找可能在任何地方的扩展方法。

所有类都是由对象类派生的。 也许试试这个代码

 public static bool IsDynamicNull(this object obj) { return (obj == null || obj is DynamicNull); }