ホームページ > バックエンド開発 > C++ > C# でプロパティを参照によって効果的に渡すにはどうすればよいですか?

C# でプロパティを参照によって効果的に渡すにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-11 08:54:42
オリジナル
416 人が閲覧しました

How Can I Effectively Pass Properties by Reference in C#?

C# での参照によるプロパティの受け渡し

プロパティはそのバッキング フィールドへの参照を公開しないため、C# でプロパティを参照によって渡すことは簡単ではありません。ただし、同様の動作を実現する方法はあります。

1. 戻り値:

このメソッドは、入力値が null または空でない場合は入力値を返し、それ以外の場合は元のプロパティ値を返します。

<code class="language-csharp">string GetString(string input, string output)
{
    if (!string.IsNullOrEmpty(input))
    {
        return input;
    }
    return output;
}

void Main()
{
    var person = new Person();
    person.Name = GetString("test", person.Name);
    Debug.Assert(person.Name == "test");
}</code>
ログイン後にコピー

2. デリゲート:

デリゲートを使用すると、デリゲート操作を通じて入力値をプロパティに割り当てることができます。

<code class="language-csharp">void SetStringValue(string input, Action<string> setOutput)
{
    if (!string.IsNullOrEmpty(input))
    {
        setOutput(input);
    }
}

void Main()
{
    var person = new Person();
    SetStringValue("test", value => person.Name = value);
    Debug.Assert(person.Name == "test");
}</code>
ログイン後にコピー

3. LINQ 式:

このメソッドは、LINQ 式を利用してプロパティのバッキング フィールドを取得し、入力値を割り当てます。 (このメソッドのコード例は、元のテキストに構文エラーが含まれているため、直接実行できません。修正された例を以下に示しますが、実際の状況に応じて調整する必要がある場合があります。)

<code class="language-csharp">void SetStringProperty<T, TProperty>(string input, T target, Expression<Func<T, TProperty>> propertyExpression)
{
    if (!string.IsNullOrEmpty(input))
    {
        var memberExpression = (MemberExpression)propertyExpression.Body;
        var propertyInfo = (PropertyInfo)memberExpression.Member;
        propertyInfo.SetValue(target, Convert.ChangeType(input, propertyInfo.PropertyType));
    }
}


void Main()
{
    var person = new Person();
    SetStringProperty("test", person, x => x.Name);
    Debug.Assert(person.Name == "test");
}</code>
ログイン後にコピー

4. 反省:

リフレクションを使用すると、プロパティの基になるフィールドにアクセスし、入力値を割り当てることができます。

<code class="language-csharp">void SetPropertyValue(string input, object target, string propertyName)
{
    if (!string.IsNullOrEmpty(input))
    {
        var prop = target.GetType().GetProperty(propertyName);
        prop.SetValue(target, input);
    }
}

void Main()
{
    var person = new Person();
    SetPropertyValue("test", person, nameof(Person.Name));
    Debug.Assert(person.Name == "test");
}</code>
ログイン後にコピー

リフレクションとLINQ式を使用する方法は目的を達成できますが、比較的非効率であり、コードの可読性と保守性も低下する可能性があることに注意してください。 特別なニーズがない限り、戻り値またはデリゲートメソッドを優先することをお勧めします。 さらに、すべての例では、Person という名前の Name 属性を含む string クラスを定義する必要があります。

以上がC# でプロパティを参照によって効果的に渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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