C# の匿名型は、軽量のアドホック オブジェクトを作成する便利な方法を提供します。ただし、宣言されているスコープ外でこれらのオブジェクトにアクセスするのは困難な場合があります。
以下のサンプル コードを考えてみましょう。
void FuncB() { var obj = FuncA(); Console.WriteLine(obj.Name); } FuncA() { var a = (from e in DB.Entities where e.Id == 1 select new { Id = e.Id, Name = e.Name }).FirstOrDefault(); return a; }
ここでは、匿名型オブジェクトが FuncA メソッドで作成され、 objとして返されます。ただし、FuncB メソッドでは、コンパイラは、obj に Name の定義が含まれていないと警告します。
宣言されたスコープ外の匿名型オブジェクトのプロパティにアクセスできないのはなぜですか?
匿名型は本質的に、厳密に型指定されたインターフェイスを実装するコンパイラによって生成されたクラスです。匿名型を作成すると、コンパイラは、作成された一意の匿名型ごとに一意の型名を生成します。これらの型は、宣言されたアセンブリに固有であり、そのアセンブリの外部からアクセスすることはできません。
宣言されたスコープ外の匿名型オブジェクトにアクセスできますか?
技術的には、はい。ただし、パフォーマンスが低下する可能性やセキュリティ上の問題があるため、これは強くお勧めしません。
「例によるキャスト」として知られる 1 つの方法には、リフレクションを使用して匿名型オブジェクトを既知の例の型にキャストすることが含まれます。ただし、このソリューションは複雑で信頼性が低く、将来のコンパイラの変更によって機能しなくなる可能性があります。
public void FuncB() { var example = new { Id = 0, Name = string.Empty }; var obj = CastByExample(FuncA(), example); Console.WriteLine(obj.Name); }
宣言されたスコープ外の匿名型オブジェクトにアクセスすると、予期しない動作が発生する可能性があり、通常は推奨されないことに注意することが重要です。 .
以上が宣言されたスコープ外の C# 匿名型オブジェクトにアクセスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。