C# 屬性修改:繞過直接傳遞參考
C# 不直接支援透過引用傳遞屬性。 此限制可能會使外部修改屬性的嘗試變得複雜,從而導致意外結果。
了解編譯時問題
下面的程式碼說明了這個問題:
<code class="language-csharp">public void GetString(string inValue, ref string outValue) { // code } public void SetWorkPhone(string inputString) { GetString(inputString, ref this.WorkPhone); // Compile-time error }</code>
這會失敗,因為屬性不是引用型別;它們是管理底層私有欄位的方法。
修改屬性的替代方法
雖然直接引用傳遞是不可能的,但有幾種技術可以達到類似的結果:
<code class="language-csharp">public string GetString(string inputString) { return string.IsNullOrEmpty(inputString) ? this.WorkPhone : inputString; }</code>
<code class="language-csharp">public void GetString(string inputString, Action<string> updateWorkPhone) { if (!string.IsNullOrEmpty(inputString)) { updateWorkPhone(inputString); } }</code>
<code class="language-csharp">public void GetString<T>(string inputString, T target, Expression<Func<T, string>> outExpr) { if (!string.IsNullOrEmpty(inputString)) { var prop = (outExpr.Body as MemberExpression).Member as PropertyInfo; prop.SetValue(target, inputString); } }</code>
<code class="language-csharp">public void GetString(string inputString, object target, string propertyName) { if (!string.IsNullOrEmpty(inputString)) { var prop = target.GetType().GetProperty(propertyName); prop.SetValue(target, inputString); } }</code>
這些方法有效地規避了直接傳遞引用的限制,提供了間接修改 C# 屬性的受控且安全的方法。
以上是不支援直接引用傳遞時如何有效修改C#屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!