是否可以解决此错误:
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'
答案 0 :(得分:4)
没有。见https://stackoverflow.com/a/5311527/613130
当您使用dynamic
对象时,您无法通过&#34;扩展方法语法&#34;来调用扩展方法。说清楚:
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
。什么&#34;视为动态&#34;手段?这意味着生成的代码而不是直接使用变量,使用反射在对象类型内搜索所需的方法/属性/ ...(在这种情况下,在int[]
类型内)。很明显,反射可以绕过所有加载的程序集,以查找可能在任何地方的扩展方法。
答案 1 :(得分:2)
所有由对象类派生的类。也许试试这段代码
public static bool IsDynamicNull(this object obj)
{
return (obj == null || obj is DynamicNull);
}