C#调用动态方法错误

时间:2016-06-02 22:52:48

标签: c# dynamic

这有效:

dynamic exp = new List<int>();
exp.Add(4);

但这不是:

dynamic exp = new List<int>();
exp.Add((object)4);

RuntimeBinderException: The best overloaded method match for 'System.Collections.Generic.List<int>.Add(int)' has some invalid arguments

这是一个例子,但在实际代码中,我不知道类型,但在运行时。

有没有办法使用实例参数类型绑定绑定器?并且只有他们不匹配才能提出异常?

1 个答案:

答案 0 :(得分:3)

问题是List<int> 不是动态对象。它具有已知的运行时类型并保留int。将变量声明为dynamic并不会改变这一点。您只能将int值添加到该列表中,否则您将在运行时获得异常。在您的特定情况下,List<int>.Add(object)不存在,因此会因绑定程序异常而失败。

由于您在编译时不知道类型,而不是生成变量dynamic,因此请将其声明为IList。通用列表实现包含IList的{​​{1}}接口,并且可以接受底层实现允许的任何类型(IList.Add(object))。您仍然需要确保这些值与该列表兼容,否则您将获得参数异常。