Die direkte Übergabe von C#-Eigenschaften per Referenz ist aufgrund der Referenzsemantik der Sprache nicht möglich. Mehrere Methoden bieten jedoch eine ähnliche Funktionalität.
1. Änderung des Rückgabewerts:
Die einfachste Methode besteht darin, den geänderten Eigenschaftswert von der Änderungsfunktion zurückzugeben. Der aufrufende Code aktualisiert dann die Eigenschaft mit diesem zurückgegebenen Wert.
<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. Delegiertenbasierter Ansatz:
Delegierte ermöglichen die Übergabe von Funktionsreferenzen als Argumente. Dies ermöglicht die Änderung des Eigenschaftswerts innerhalb des Gültigkeitsbereichs des Delegaten.
<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. Nutzung von LINQ-Ausdrücken:
LINQ-Ausdrücke bieten Zugriff auf Reflektion und ermöglichen die dynamische Einstellung von Eigenschaftswerten.
<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. Reflexion nutzen:
Reflection bietet Laufzeitprüfung und Änderung der Objektstruktur. Dies ermöglicht das dynamische Abrufen und Festlegen von Eigenschaftswerten.
<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>
Diese Methoden bieten Alternativen zur direkten Übergabe von Eigenschaftsreferenzen und ermöglichen eine flexible Manipulation von Eigenschaftswerten in C#.
Das obige ist der detaillierte Inhalt vonWie kann ich C#-Eigenschaften effektiv durch Referenz ändern, wenn eine direkte Übergabe nicht möglich ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!