動的オブジェクトを他のアセンブリの型で動作させることができません。これを複製するには、新しいソリューションを作成し、クラス ライブラリを追加し、コンソール アプリケーションを追加し、クラス ライブラリへの参照をコンソール アプリケーションに追加し、クラス ライブラリにこのクラスを作成します。
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
行で、メッセージとともに a がスローされます。DynamicTest
RuntimeBinderException
'object' does not contain a definition for 'Name'
DynamicTest
クラスをコンソール アプリケーション アセンブリに移動すると、期待どおりに動作します。アセンブリ間での動的使用に制限はありますか? これは、ダイナミックの非常に合理的な使用例のようです。