ホームページ >バックエンド開発 >C++ >スコープ外の C# 匿名型オブジェクトにアクセスするにはどうすればよいですか?

スコープ外の C# 匿名型オブジェクトにアクセスするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-04 18:48:39459ブラウズ

How Can I Access C# Anonymous Type Objects Outside Their Scope?

スコープ外の 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。