Heim > Backend-Entwicklung > C++ > Wie kann ich C#-Eigenschaften effektiv durch Referenz ändern, wenn eine direkte Übergabe nicht möglich ist?

Wie kann ich C#-Eigenschaften effektiv durch Referenz ändern, wenn eine direkte Übergabe nicht möglich ist?

Mary-Kate Olsen
Freigeben: 2025-01-11 09:50:42
Original
1015 Leute haben es durchsucht

How Can I Effectively Modify C# Properties by Reference When Direct Passing Isn't Possible?

C#-Eigenschaften per Referenz ändern: Problemumgehungen

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage