スコープを超えた匿名型オブジェクトのプロパティへのアクセス
C# で匿名型を操作する場合、そのオブジェクトのプロパティにアクセスする必要がある状況に遭遇することがあります。宣言されたスコープ外のプロパティ。匿名型の性質により、これは課題となる可能性があります。
FuncB() のような入れ子関数内で定義された匿名型のプロパティにアクセスするには、「例によるキャスト」として知られる手法を使用できます。このアプローチでは、リフレクション を使用して匿名オブジェクトの型を識別し、それを互換性のある型にキャストします。
public void FuncB() { var example = new { Id = 0, Name = string.Empty }; var obj = CastByExample(FuncA(), example); Console.WriteLine(obj.Name); } private object FuncA() { var a = from e in DB.Entities where e.Id == 1 select new { Id = e.Id, Name = e.Name }; return a.FirstOrDefault(); } private T CastByExample<T>(object target, T example) { return (T)target; }
この手法では、匿名オブジェクトと同じプロパティを持つサンプル オブジェクトを作成します。 type (コード スニペットの例) を使用してから、リフレクションを使用してオブジェクトの型を決定します。最後に、元のオブジェクト (ターゲット) をサンプル オブジェクトの型にキャストすると、そのプロパティにアクセスできるようになります。
免責事項:
技術的には可能ですが、この「例によるキャスト」ハックを使用して、スコープ外の匿名型オブジェクトにアクセスすることは、一般的に推奨されません。匿名型は、独自のスコープ内で使用されるように設計されており、その有効期間を超えて延長すると、予期しない動作や潜在的なバグが発生する可能性があります。一般に、カプセル化とデータの整合性を維持するには、呼び出し元の関数にデータを戻すか、別のオブジェクト指向のアプローチを使用することが望ましいです。
以上がC# でスコープ外の匿名型プロパティにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。