2

次のサンプルでは、​​x.propertyXは正常に動作しますが、 y.propertyXMicrosoft.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 }

匿名型が提供するスタイル。

4

1 に答える 1

1

匿名型は、それらが作成されたアセンブリの内部にあります。ソース コードを制御できる場合は、それらをフレンド アセンブリにすることができます。

[assembly:InternalsVisibleTo("TheOtherAssembly")]

しかし欠点があります。

于 2011-10-05T07:35:39.203 に答える