C# での参照によるプロパティの受け渡し
C# では、プロパティを参照によって渡すことは、あるメソッドでプロパティの値を変更し、その変更を別のメソッドに反映することを意味します。ただし、デフォルトではプロパティは参照によって渡されません。この動作を実現するには複数の方法があります。
戻り値
1 つの方法は、ゲッター メソッドから値を返し、呼び出し側のメソッドでプロパティを更新することです。
<code class="language-csharp">public string GetString(string input, string output) { if (!string.IsNullOrEmpty(input)) { return input; } return output; } public void Main() { Person person = new Person(); person.Name = GetString("test", person.Name); Debug.Assert(person.Name == "test"); }</code>
代表団
もう 1 つのアプローチは、プロパティを設定するアクションを実行するデリゲートを使用することです。
<code class="language-csharp">public void GetString(string input, Action<string> setOutput) { if (!string.IsNullOrEmpty(input)) { setOutput(input); } } public void Main() { Person person = new Person(); GetString("test", value => person.Name = value); Debug.Assert(person.Name == "test"); }</code>
LINQ 式
プロパティは、LINQ 式を使用したリフレクションによって更新することもできます。
<code class="language-csharp">public void GetString<T>(string input, T target, Expression<Func<T, string>> outExpr) { if (!string.IsNullOrEmpty(input)) { MemberExpression expr = (MemberExpression)outExpr.Body; PropertyInfo prop = (PropertyInfo)expr.Member; prop.SetValue(target, input, null); } } public void Main() { Person person = new Person(); GetString("test", person, x => x.Name); Debug.Assert(person.Name == "test"); }</code>
リフレクション
最後に、リフレクションを使用してプロパティの値を直接設定できます。
<code class="language-csharp">public void GetString(string input, object target, string propertyName) { if (!string.IsNullOrEmpty(input)) { PropertyInfo prop = target.GetType().GetProperty(propertyName); prop.SetValue(target, input); } } public void Main() { Person person = new Person(); GetString("test", person, nameof(person.Name)); Debug.Assert(person.Name == "test"); }</code>
以上がC# でプロパティを参照によって渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。