ホームページ > バックエンド開発 > C++ > 宣言されたスコープ外の C# 匿名型オブジェクトにアクセスできますか?

宣言されたスコープ外の C# 匿名型オブジェクトにアクセスできますか?

DDD
リリース: 2024-12-28 17:17:11
オリジナル
739 人が閲覧しました

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

宣言されたスコープ外の匿名型オブジェクトへのアクセス

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート