C# Dynamic - "RuntimeBinderException"

本文关键字:quot RuntimeBinderException Dynamic | 更新日期: 2023-09-27 18:16:31

我正在用ExpandoObject初始化动态,并向它添加一些项目。

        dynamic dy = new System.Dynamic.ExpandoObject();
        dy.Property2 = new List<string>();
        dy.Property2.Add("Two");
        dy.Property2.Insert(0, "Zero");
        var coll1 = (List<string>)dy.Property2;
        var element = coll1.ElementAt(0);
上面的

代码可以正常工作。但是,如果用

下面提到的代码替换最后两个语句,则抛出异常。
        var data = dy.Property2.ElementAt(0);

异常是'System.Collections.Generic. 'List'没有包含'ElementAt'的定义

C# Dynamic - "RuntimeBinderException"

这是绝对正确的- List<T> 没有ElementAt方法。它只适用于您的原始代码,因为它是IEnumerable<T>上的扩展方法。动态类型不允许您使用"特殊"语法调用扩展方法,但您可以将其作为普通的静态方法调用来调用:

var data = Enumerable.ElementAt(dy.Property2, 0);