是否可以解决此错误:
public static class LayoutExtensions { /// <summary> /// Verifies if an object is DynamicNull or just has a null value. /// </summary> 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
使用动态对象时,无法通过“扩展方法语法”调用扩展方法.说清楚:
int[] arr = new int[5]; int first1 = arr.First(); // extension method Syntax,OK int first2 = Enumerable.First(arr); // plain Syntax,OK
这两个都可以,但有动态
dynamic arr = new int[5]; int first1 = arr.First(); // BOOM! int first2 = Enumerable.First(arr); // plain Syntax,OK
如果您知道动态对象的工作原理,这是合乎逻辑的动态变量/ field / …只是一个对象变量/ field / …(加上一个属性),C#编译器知道它应该被视为动态的. “视为动态”意味着什么?这意味着生成的代码,而不是直接使用变量,使用反射来搜索对象类型内所需的方法/属性/ …(在本例中,在int []类型内).很明显,反射不能绕过所有加载的程序集以查找可能在任何地方的扩展方法.