我一直在调试这个问题几个小时,最后找到了问题的罪魁祸首。让我解释一下设置。
(我有这些实现它们的接口和类A,B)
public interface IA { public void DoSomething(int i); }
public interface IB : IA { public void SomethingElse(); }
(某些课程中的某种方法)
dynamic options = JSonConvert.DeserializeObject<dynamic>(json);
var id = int.Parse(options.someId.ToString());
IB b = new B();
b.DoSomething(id);
此代码按预期编译,但在运行时我得到“IB不包含'DoSomething'的定义”。
但是,如果我改为:
var id = 1;
IB b = new B();
b.DoSomething(id);
然后一切正常!
之前我在方法中使用动态时发生过类似的事情。这里发生了什么?有谁知道吗?
注意:我可以通过将两条线移动到另一种方法或者完全避免使用动态来轻松避免这种情况,但我只是为什么这么说:)
有趣的事实:当我在一个界面和一个类中使用'DoSomething'和'SomethingElse'时,这并没有造成任何问题......
答案 0 :(得分:-1)
正如@EdPlunkett所指出的,使用“int”代替“var”确实有效。如果您阅读第一篇文章中的评论,您将找到他为何会发生这种情况的解释。