在C#中透過引用傳遞屬性
在C#中,透過引用傳遞屬性是指在一個方法中修改屬性的值,並在另一個方法中反映這些變更。但是,預設情況下,屬性不會透過引用傳遞。有多種方法可以實現此行為。
回傳值
一種方法是從getter方法傳回該值,並在呼叫方法中更新屬性。
<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>
委託
另一種方法是使用一個委託,該委託採用一個設定屬性的操作。
<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中文網其他相關文章!