次のサンプルでは、x.propertyXは正常に動作しますが、 y.propertyXはMicrosoft.CSharp.RuntimeBinder.RuntimeBinderExceptionを返し、 'propertyX' が 'object' で定義されていないと不平を言います。
Program クラスの CreateDynamic メソッド (以下を参照) と Class1 のメソッド (非表示) はまったく同じですが、Class1 は Program とは別のプロジェクトにあります。Class1 を Program のプロジェクトに移動すると、すべて正常に動作します。
class Program
{
public static object CreateDynamic()
{
return new { propertyX = "asdf" };
}
static void Main(string[] args)
{
dynamic x = CreateDynamic();
Console.WriteLine(x.propertyX);
dynamic y = Class1.CreateDynamic();
Console.WriteLine(y.propertyX);
匿名型を動的型として dll 全体で機能させるにはどうすればよいですか?それとも不可能ですか?
更新: Fwiw、ExpandoObjects を使用してそれを回避できることがわかりました。これを動的に「キャスト」しますが、ExpandoObjects は、
new { key1 = val1, key2 = val2 }
匿名型が提供するスタイル。