我无法让动态对象在其他程序集中的类型中工作。要复制这个,创建一个新的解决方案,添加一个类库,添加一个控制台应用程序,将类库的引用添加到控制台应用程序,在类库中创建这个类:
public class DynamicTest
{
public dynamic People { get; set; }
public override string ToString()
{
var sb = new StringBuilder();
foreach (var person in People)
{
sb.AppendLine(person.Name);
}
return sb.ToString();
}
}
并将其插入控制台应用程序的Program.Main()
:
var test = new DynamicTest
{
People = new[] {
new { Name = "John" },
new { Name = "Jane" }
}
};
Console.WriteLine(test.ToString());
Console.ReadLine();
运行控制台应用程序。在类中的sb.AppendLine
行上DynamicTest
,aRuntimeBinderException
与 message 一起被抛出'object' does not contain a definition for 'Name'
。
如果我将该DynamicTest
类移动到控制台应用程序程序集中,它会按预期工作。跨程序集使用动态是否有限制?这似乎是一个非常合理的动态用例。