Heim > Backend-Entwicklung > C++ > Wie kann ich C#-Eigenschaften effektiv ändern, wenn Direct Pass-by-Reference nicht unterstützt wird?

Wie kann ich C#-Eigenschaften effektiv ändern, wenn Direct Pass-by-Reference nicht unterstützt wird?

Susan Sarandon
Freigeben: 2025-01-11 06:23:48
Original
870 Leute haben es durchsucht

How Can I Effectively Modify C# Properties When Direct Pass-by-Reference Isn't Supported?

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

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:

  • Änderung des Rückgabewerts: Der einfachste Ansatz besteht darin, den geänderten Wert zurückzugeben:
<code class="language-csharp">public string GetString(string inputString)
{
    return string.IsNullOrEmpty(inputString) ? this.WorkPhone : inputString;
}</code>
Nach dem Login kopieren
  • Delegatbasierte Aktualisierung: Verwenden Sie einen Delegaten, um die Eigenschaft zu aktualisieren:
<code class="language-csharp">public void GetString(string inputString, Action<string> updateWorkPhone)
{
    if (!string.IsNullOrEmpty(inputString))
    {
        updateWorkPhone(inputString);
    }
}</code>
Nach dem Login kopieren
  • LINQ-Ausdrucksansatz: Eine fortgeschrittenere Methode verwendet LINQ-Ausdrücke:
<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>
Nach dem Login kopieren
  • Reflexionsbasierte Modifikation: Reflection bietet dynamischen Zugriff und Modifikation auf Eigenschaften:
<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>
Nach dem Login kopieren

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!

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