是否可以解决此错误:
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
dynamic arr = new int[5];
int first1 = arr.First(); // BOOM!
int first2 = Enumerable.First(arr); // plain syntax, OK
如果您知道 dynamic
对象的工作原理,这是合乎逻辑的。 dynamic
变量/字段/...只是一个 object
变量/字段/...(加上一个属性),C# 编译器知道应该将其视为 动态
。 “视为动态”是什么意思?这意味着生成的代码,而不是直接使用变量,使用反射来搜索所需的方法/属性/...在对象的类型中(所以在这种情况下,在 int[]
类型)。显然,反射无法绕过所有加载的程序集来寻找可能在任何地方的扩展方法。
关于c# - 在 C# 中创建动态扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29743568/