0

これは私がその議論だと思うので問題ではありません、私はあなたがメソッド間で匿名型を返すことができないことを知っています、私が最初に匿名型を使用したとき、私はメソッド間でそれを返すことができて本当にいいと思いましたそして.net4が出たときそして、動的型のエディションでは、次のような動的型を介して匿名型を返すことに希望があるかもしれないと思いました。

      public static dynamic  getCustomer()
    {
        .....
        var x = from c in customers
                select new {Fname = c.FirstName};

        return x;
    }

その後

static void Main(string[] args)
    {
        dynamic x = getCustomer();
        Console.WriteLine(x.First().Fname);
        Console.ReadKey();
    }

残念ながら、コンパイルは良好ですが、機能しません。

私はその理由を推測します:

コンパイル型で知られている匿名型は、実行時に既知のクラスにラップする必要があります!現在、匿名型は、コンパイル時に情報を運び、クラスが来てこの情報を実行時に取得することを期待していますが、動的型はコンパイル時に不明です。匿名型を動的型に渡すと、匿名型はその情報/インテリジェンスを失うことになります。デバッグを試みましたが、必要なデータを取得できましたが、デバッグモードでのみ機能するか、何かが不足している可能性があります。

誰かがそれを機能させるか、それについて考えたかどうか疑問に思いましたか?

4

1 に答える 1

2

匿名タイプを返すことはできますが、そうすることを宣言することはできません。あなたは恐ろしいハックでそれを回避することができます。

コードが機能しない理由は、匿名型とは関係ありません。動的型付けで見つからない拡張メソッドと関係があります。

への変更:

Console.WriteLine(Enumerable.First(x).Fname);

そして私はそれがうまくいくことを期待しています。

于 2010-08-02T09:39:33.767 に答える