Heim > Backend-Entwicklung > C++ > Warum ändert das Ändern einer Zeichenfolge in einer C#-Methode nicht die ursprüngliche Zeichenfolge?

Warum ändert das Ändern einer Zeichenfolge in einer C#-Methode nicht die ursprüngliche Zeichenfolge?

Patricia Arquette
Freigeben: 2025-01-24 07:11:09
Original
181 Leute haben es durchsucht

Why Doesn't Modifying a String in a C# Method Change the Original String?

Umfassendes Verständnis der String-Übertragung in C#

Strings in C# sind Referenztypen, was jedoch oft zu Missverständnissen führt. Dieser Artikel befasst sich mit den Feinheiten der String-Übergabe und erklärt, warum sich der folgende Code nicht wie erwartet verhält:

<code class="language-csharp">class Test
{
    public static void Main()
    {
        string test = "before passing";
        Console.WriteLine(test);
        TestI(test);
        Console.WriteLine(test);
    }

    public static void TestI(string test)
    {
        test = "after passing";
    }
}</code>
Nach dem Login kopieren

Obwohl es sich bei der Zeichenfolge um einen Referenztyp handelt, hat sich die zweite Ausgabe dieses Codes nicht geändert. Dies liegt an der Unterscheidung zwischen der Übergabe von Referenzen als Wert und der Übergabe von Objekten als Referenz.

Das Übergeben einer Referenz als Wert bedeutet, dass die Referenz selbst kopiert wird. Änderungen innerhalb der Methode wirken sich nicht auf die ursprüngliche Variable aus. Durch die Übergabe eines Objekts als Referenz wird die Referenz selbst geändert, und Änderungen innerhalb der Methode werden in der Originalvariablen widergespiegelt.

Damit Zeichenfolgen wie erwartet funktionieren, müssen sie als Referenz übergeben werden (mit dem Schlüsselwort ref):

<code class="language-csharp">using System;

class Test
{
    public static void Main()
    {
        string test = "before passing";
        Console.WriteLine(test);
        TestI(ref test);
        Console.WriteLine(test);
    }

    public static void TestI(ref string test)
    {
        test = "after passing";
    }
}</code>
Nach dem Login kopieren

Die geänderte Codeausgabe lautet wie folgt:

<code>输入:before passing
输出:after passing</code>
Nach dem Login kopieren

Dies ist nicht dasselbe wie das Ändern des zugrunde liegenden Objekts. Zeichenfolgen in C# sind unveränderlich und ihr Inhalt kann nicht geändert werden. Wir können jedoch ein Objekt als Referenz übergeben (z. B. StringBuilder) und seine Daten ändern:

<code class="language-csharp">using System;
using System.Text;

class Test
{
    public static void Main()
    {
        StringBuilder test = new StringBuilder();
        Console.WriteLine(test);
        TestI(test);
        Console.WriteLine(test);
    }

    public static void TestI(StringBuilder test)
    {
        // 注意,我们没有改变 "test" 参数的值。
        // 我们改变的是它所引用的对象中的数据。
        test.Append("changing");
    }
}</code>
Nach dem Login kopieren

Die Ausgabe dieses Codes ist:

<code>输入:
输出:changing</code>
Nach dem Login kopieren

Zusammenfassend ist es für die Arbeit mit Zeichenfolgen in C# von entscheidender Bedeutung, den Unterschied zwischen der Übergabe einer Referenz als Wert und der Übergabe eines Objekts als Referenz zu verstehen. Durch den Einsatz geeigneter Methoden kann das erwartete Verhalten des Codes erreicht werden.

Das obige ist der detaillierte Inhalt vonWarum ändert das Ändern einer Zeichenfolge in einer C#-Methode nicht die ursprüngliche Zeichenfolge?. 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