加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:46:38 所属栏目:百科 来源:网络整理
导读:是否可以解决此错误: 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 Dynam
是否可以解决此错误:
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 []类型内).很明显,反射不能绕过所有加载的程序集以查找可能在任何地方的扩展方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读