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

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

Barbara Streisand
リリース: 2025-01-03 13:19:40
オリジナル
234 人が閲覧しました

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

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

C# では、匿名型はソースから抽出されたプロパティ名と値に基づいて動的に生成されます。ただし、これらのオブジェクトのスコープは、それらが宣言されているブロックに制限されます。ここで疑問が生じます: 宣言されたスコープ外の匿名型オブジェクトにどのようにアクセスできますか?

「例によるキャスト」の使用 (注意を推奨)

一般的には使用されていますが、推奨されませんが、「キャスト バイ サンプル」として知られる手法を使用すると、スコープを超えた匿名型オブジェクトにアクセスできます。このハックには、アクセスしたい匿名型と同じプロパティを持つ別の「サンプル」オブジェクトを作成することが含まれます。

実装:

  1. example" オブジェクトを作成し、匿名型と同じプロパティを持つようにします。
  2. 匿名型を "example" にキャストします。 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;
}
ログイン後にコピー

注意事項:

  • この手法は Microsoft によって正式にサポートされていません。
  • 予期しない動作や潜在的なエラーが発生する可能性があります。
  • 使用しないことを強くお勧めします。運用コードでこのアプローチを使用します。

要約すると、「例によるキャスト」を使用してスコープを超えた匿名型オブジェクトにアクセスすることは可能ですが、これは危険な行為であり、可能な限り避けるべきです。

以上がC# で宣言されたスコープ外の匿名型オブジェクトにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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