言語の参照セマンティクスにより、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 サイトの他の関連記事を参照してください。