C#-Eigenschaftsänderung: Umgehen der direkten Pass-by-Reference
C# unterstützt die Übergabe von Eigenschaften als Referenz nicht direkt. Diese Einschränkung kann Versuche, Eigenschaften extern zu ändern, erschweren und zu unerwarteten Ergebnissen führen.
Das Problem der Kompilierungszeit verstehen
Der folgende Code veranschaulicht das Problem:
<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>
Dies schlägt fehl, da Eigenschaften keine Referenztypen sind. Es handelt sich um Methoden zur Verwaltung zugrunde liegender privater Felder.
Alternative Ansätze zur Änderung von Eigenschaften
Während eine direkte Referenzübergabe unmöglich ist, erzielen verschiedene Techniken ähnliche Ergebnisse:
<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>
Diese Methoden umgehen effektiv die direkte Pass-by-Reference-Beschränkung und bieten kontrollierte und sichere Möglichkeiten, C#-Eigenschaften indirekt zu ändern.
Das obige ist der detaillierte Inhalt vonWie kann ich C#-Eigenschaften effektiv ändern, wenn Direct Pass-by-Reference nicht unterstützt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!