スコープ外の C# 匿名型オブジェクトへのアクセス
C# では、匿名型は、一連のプロパティ初期化子が後に続く new キーワードを使用して作成されます。中括弧内。これらは、名前を付けたり、さらに定義したりする必要のない一時オブジェクトを作成する必要がある場合に便利です。ただし、宣言されているスコープ外の匿名型オブジェクトにアクセスするのは困難な場合があります。
問題を理解するには、次のコードを検討してください。
void FuncB() { var obj = FuncA(); Console.WriteLine(obj.Name); } object FuncA() { var a = (from e in DB.Entities where e.Id == 1 select new { Id = e.Id, Name = e.Name }).FirstOrDefault(); return a; }
このコードでは、FuncA() Id と Name という 2 つのプロパティを持つ匿名型を返します。ただし、FuncB() が Name プロパティにアクセスしようとすると、コンパイラは FuncA() によって返される匿名型のプロパティを判断できないため、エラーが発生します。
考えられる解決策の 1 つは、「キャストによるキャスト」を使用することです。 example":
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; }
この「例によるキャスト」手法には、目的の匿名型のサンプル オブジェクトを作成し、返されたオブジェクトをその例の型にキャストすることが含まれます。匿名型のプロパティにアクセスできるようになりますが、混乱を招き、エラーが発生しやすいため、一般的にはお勧めできません。
以上がスコープ外の C# 匿名型オブジェクトにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。