1

範囲という言葉は適切ではないかもしれません。次のコードでは、コレクション要素のオブジェクトのプロパティにアクセスできません。より良い戻り値のデータ型またはそれらのプロパティにアクセスする方法はありますか?

protected object Modules()
{
    DirectoryInfo di = new DirectoryInfo(Server.MapPath("~/"));
    var folders = from x in di.GetDirectories()
                    where
                    !(new string[] {
                        "app_data","bin","obj","scripts","styles","properties"
                        }).Contains<string>(x.Name.ToLower())
                    select new
                    {
                        Name = x.Name,
                        Path = x.FullName
                    };
    return folders
}
4

4 に答える 4

5

実行可能な解決策は 2 つあります。

  1. そのための実際のクラスを作成します。それが好ましい解決策です。
  2. dynamicの代わりにメソッドを返すようにしobjectます。これの問題は、このメソッドの結果を使用するコードのコンパイル時のチェックが失われることです。
于 2012-11-29T17:34:55.640 に答える
1

匿名型が定義されたスコープを離れたら、リフレクションを使用してそのメンバーに到達する必要があります。

私が考えることができる他の 2 つのオプションは、動的型を使用する (4.0 フレームワーク以降を使用している場合) か、匿名型の代わりに定義型を作成することです。

于 2012-11-29T17:34:27.373 に答える
1

データを渡すための新しい型を作成することをお勧めします。データのスコープが保護されている場合は、保護されたネストされたサブクラスを使用して、小さなデータ クラスの過剰増殖を防ぐことができます。

于 2012-11-29T17:35:21.660 に答える
0

IEnumerable<dynamic>代わりに使用してください。

msdn によると、「動的型により、コンパイル時の型チェックをバイパスする操作が可能になります。代わりに、これらの操作は実行時に解決されます。動的型は、Office オートメーション API などの COM API へのアクセスを簡素化し、さらにIronPython ライブラリなどの動的 API や、HTML ドキュメント オブジェクト モデル (DOM) に対応しています。」

http://msdn.microsoft.com/en-us/library/dd264741.aspx

于 2012-11-29T17:34:19.247 に答える