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

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

DDD
リリース: 2024-12-29 22:01:25
オリジナル
762 人が閲覧しました

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

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

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