如果你运行 TestClass.Test() 你会得到一个 RuntimeBinderException。这一切都始于var str = DoSomething(obj);
隐式键入动态而不是字符串。有人可以解释这里发生了什么吗?为什么RequiresString(str);
有效?我知道你不能在动态对象上调用扩展方法,但这整件事对我来说有点肮脏和破碎。尽管存在明显的类型不匹配,但一切编译良好,然后在运行时失败。
public static class ExtensionTest
{
public static string ToJsonTest(this object x)
{
return string.Empty;
}
}
public static class TestClass
{
public static void Test()
{
dynamic obj = new ExpandoObject();
obj.var1 = "hello";
var str = DoSomething(obj);
var testObj = RequiresString(str);
var json = testObj.ToJsonTest();
}
public static string DoSomething(object x)
{
return string.Empty;
}
public static TestObj RequiresString(string x)
{
return new TestObj();
}
public class TestObj
{
public int Prop1 { get; set; }
}
}