ホームページ >バックエンド開発 >C++ >直接受け渡しが不可能な場合、参照によって C# プロパティを効果的に変更するにはどうすればよいですか?

直接受け渡しが不可能な場合、参照によって C# プロパティを効果的に変更するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-11 09:50:421017ブラウズ

How Can I Effectively Modify C# Properties by Reference When Direct Passing Isn't Possible?

参照による C# プロパティの変更: 回避策

言語の参照セマンティクスにより、C# プロパティを参照によって直接渡すことは実現できません。 ただし、いくつかのメソッドが同様の機能を提供します。

1.戻り値の変更:

最も単純な方法には、変更されたプロパティ値を変更関数から返すことが含まれます。 次に、呼び出しコードは、この戻り値でプロパティを更新します。

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

// Example usage:
var person = new Person();
person.Name = GetString("test", person.Name);</code>

2.デリゲートベースのアプローチ:

デリゲートを使用すると、関数参照を引数として渡すことができます。これにより、デリゲートのスコープ内でプロパティ値を変更できるようになります。

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

// Example usage:
var person = new Person();
SetStringValue("test", value => person.Name = value);</code>

3. LINQ 式の活用:

LINQ 式はリフレクションへのアクセスを提供し、動的なプロパティ値の設定を可能にします。

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

// Example usage:
var person = new Person();
SetProperty("test", person, x => x.Name);</code>

4.リフレクションの利用:

リフレクションは、オブジェクト構造の実行時の検査と変更を提供します。 これにより、プロパティ値の動的な取得と設定が可能になります。

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

// Example usage:
var person = new Person();
SetPropertyValue("test", person, nameof(Person.Name));</code>

これらのメソッドは、プロパティ参照を直接渡す代わりの手段を提供し、C# での柔軟なプロパティ値の操作を可能にします。

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

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