C# でのスコープを超えた匿名型オブジェクトへのアクセス
宣言されたスコープ外の匿名型メンバーにアクセスすると、特に次の場合に 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; }
残念ながら、obj は FuncA() の外部ではアクセスできないため、このコードはエラーになります。
慎重なアプローチ
一般に、スコープを超えた匿名型オブジェクトへのアクセスは避けることをお勧めします。これを行うと、コードが混乱し、エラーが発生する可能性があります。ただし、スコープ外の匿名型オブジェクトにアクセスすることが絶対に必要な場合は、「キャスト バイ サンプル」として知られる回避策があります。
キャスト バイ サンプル ハック
これこの手法では、CastByExample メソッドを使用して、匿名型オブジェクトを目的の型にキャストします。以下に例を示します。
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; }
サンプル オブジェクトを提供することで、CastByExample() は正しい型を推測し、ターゲット オブジェクトをその型にキャストできます。
注意
サンプルによるキャスト手法は便利ですが、使用には注意が必要です。この方法を実行すると、ターゲット オブジェクトが提供された例と一致しない場合にキャスト エラーが発生する可能性があります。スコープ外の匿名型オブジェクトにアクセスするための代替アプローチを常に検討することをお勧めします。
以上がC# でスコープ外の匿名型オブジェクトにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。