當我運行下面的代碼時,我得到RuntimeBinderException: 'object' does not contain a definition for 'SetIt'
。私人內部類動態失敗
public interface IInput { }
public interface IThing<in TInput>
{
void SetIt(TInput value);
}
public class ThingMaker
{
private class Thing<TInput> : IThing<TInput>
where TInput : IInput
{
public void SetIt(TInput value){}
}
private class Input : IInput {}
public IThing<IInput> GetThing()
{
return new Thing<IInput>();
}
public IInput GetInput()
{
return new Input();
}
}
class Program
{
static void Main(string[] args)
{
var thingMaker = new ThingMaker();
var input = thingMaker.GetInput();
dynamic thing= thingMaker.GetThing();
thing.SetIt(input);
}
}
如果我切換thing
到var
它工作正常。所以很清楚,thing
有SetIt
。當我使用動態時,這怎麼會失敗?當它是dynamic
時,不應該作爲var
工作的任何東西也能工作嗎?
我認爲它與Thing<TInput>
是私人內部類有關,因爲它在我公開時起作用。