Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A .NET lehetővé teszi a sztringek egyszerű hozzárendeléssel való létrehozását, és túlterheli az osztálykonstruktort, hogy támogassa a sztringek létrehozását számos különböző paraméterrel. A .NET számos olyan metódust is biztosít az System.String osztályban, amelyek új sztringobjektumokat hoznak létre több sztring, sztringtömb vagy objektum kombinálásával.
Sztringek létrehozása hozzárendeléssel
Egy új String objektum létrehozásának legegyszerűbb módja, ha egyszerűen egy karakterlánc-literal-t rendel hozzá egy String objektumhoz.
Sztringek létrehozása osztálykonstruktor használatával
A String osztálykonstruktor túlterheléseinek használatával karaktertömbökből létrehozhat karakterláncokat. Új karakterláncot úgy is létrehozhat, hogy egy adott karaktert meghatározott számú alkalommal megkettőz. A String(ReadOnlySpan<Char>) konstruktor túlterhelése elfogad egy ReadOnlySpan<T> vagy egy veremre allokált Span<T> karaktert, és elkerüli a köztes karaktertömb lefoglalását a felügyelt halomban, amikor ismert méretű kis karakterláncokat hoz létre, bár az eredményül kapott karakterlánc példány továbbra is a felügyelt halomra van lefoglalva.
Sztringeket visszaadó metódusok
Az alábbi táblázat számos hasznos metódust sorol fel, amelyek új karakterlánc-objektumokat adnak vissza.
| Függvény neve | Használd |
|---|---|
| String.Format | Formázott sztringet hoz létre bemeneti objektumok halmazából. |
| String.Concat | Két vagy több karakterláncból épít karakterláncokat. |
| String.Join | Új sztringet hoz létre sztringtömb kombinálásával. |
| String.Insert | Új sztringet hoz létre úgy, hogy beszúr egy sztringet egy meglévő sztring megadott indexébe. |
| String.CopyTo | Egy karakterlánc megadott karaktereit egy karaktertömb megadott helyére másolja. |
| String.Create | Egy megadott hosszúságú új sztringet hoz létre, amely karaktereket tölt fel egy visszahívási funkción keresztül, amely egy írható Span<T> és egy hívó által megadott állapotobjektumot kap. |
String.Format
A String.Format metódus segítségével formázott sztringeket hozhat létre, és több objektumot képviselő sztringeket fűzhet össze. Ez a metódus automatikusan sztringgé alakítja az átadott objektumokat. Ha például az alkalmazásnak meg kell jelenítenie egy Int32 értéket és egy DateTime értéket a felhasználó számára, egyszerűen létrehozhat egy sztringet, amely ezeket az értékeket képviseli a Format metódussal. Az ezzel a módszerrel használt formázási konvenciókról az összetett formázásról szóló szakaszban olvashat bővebben.
Az alábbi példa a Format metódussal egész változót használó sztringet hoz létre.
int numberOfFleas = 12;
string miscInfo = String.Format("Your dog has {0} fleas. " +
"It is time to get a flea collar. " +
"The current universal date is: {1:u}.",
numberOfFleas, DateTime.Now);
Console.WriteLine(miscInfo);
// The example displays the following output:
// Your dog has 12 fleas. It is time to get a flea collar.
// The current universal date is: 2008-03-28 13:31:40Z.
Dim numberOfFleas As Integer = 12
Dim miscInfo As String = String.Format("Your dog has {0} fleas. " & _
"It is time to get a flea collar. " & _
"The current universal date is: {1:u}.", _
numberOfFleas, Date.Now)
Console.WriteLine(miscInfo)
' The example displays the following output:
' Your dog has 12 fleas. It is time to get a flea collar.
' The current universal date is: 2008-03-28 13:31:40Z.
Ebben a példában DateTime.Now az aktuális dátumot és időt az aktuális szálhoz társított kultúra által meghatározott módon jeleníti meg.
String.Concat
A String.Concat metódus segítségével egyszerűen létrehozhat egy új karakterlánc-objektumot két vagy több meglévő objektumból. Nyelvfüggetlen módot biztosít a karakterláncok összefűzésére. Ez a metódus minden olyan osztályt elfogad, amely a System.Object-ból származik. Az alábbi példa két meglévő sztringobjektumból és egy elválasztó karakterből hoz létre egy sztringet.
string helloString1 = "Hello";
string helloString2 = "World!";
Console.WriteLine(String.Concat(helloString1, ' ', helloString2));
// The example displays the following output:
// Hello World!
Dim helloString1 As String = "Hello"
Dim helloString2 As String = "World!"
Console.WriteLine(String.Concat(helloString1, " "c, helloString2))
' The example displays the following output:
' Hello World!
String.Join
A String.Join metódus létrehoz egy új sztringet sztringtömbből és egy elválasztó sztringből. Ez a módszer akkor hasznos, ha több karakterláncot szeretne összefűzni, és vesszővel elválasztott listát szeretne készíteni.
Az alábbi példa szóközt használ egy sztringtömb kötéséhez.
string[] words = {"Hello", "and", "welcome", "to", "my" , "world!"};
Console.WriteLine(String.Join(" ", words));
// The example displays the following output:
// Hello and welcome to my world!
Dim words() As String = {"Hello", "and", "welcome", "to", "my", "world!"}
Console.WriteLine(String.Join(" ", words))
' The example displays the following output:
' Hello and welcome to my world!
String.Insert
A String.Insert metódus új karakterláncot hoz létre úgy, hogy beszúr egy karakterláncot egy adott pozícióba egy másik karakterláncban. Ez a módszer nulla alapú indexet használ. Az alábbi példa beszúr egy sztringet az ötödik indexpozícióba MyString , és létrehoz egy új sztringet ezzel az értékkel.
string sentence = "Once a time.";
Console.WriteLine(sentence.Insert(4, " upon"));
// The example displays the following output:
// Once upon a time.
Dim sentence As String = "Once a time."
Console.WriteLine(sentence.Insert(4, " upon"))
' The example displays the following output:
' Once upon a time.
String.CopyTo
A String.CopyTo metódus egy karakterlánc egyes részeit karaktertömbbe másolja. Megadhatja a karakterlánc kezdő indexét és a másolandó karakterek számát is. Ez a metódus a forrásindexet, a karakterek tömbjét, a célindexet és a másolni kívánt karakterek számát veszi fel. Minden index nulla alapú.
Az alábbi példa a CopyTo metódussal másolja a "Hello" szó karaktereit egy sztringobjektumból egy karaktertömb első indexpozíciójába.
string greeting = "Hello World!";
char[] charArray = {'W','h','e','r','e'};
Console.WriteLine($"The original character array: {new string(charArray)}");
greeting.CopyTo(0, charArray,0 ,5);
Console.WriteLine($"The new character array: {new string(charArray)}");
// The example displays the following output:
// The original character array: Where
// The new character array: Hello
Dim greeting As String = "Hello World!"
Dim charArray() As Char = {"W"c, "h"c, "e"c, "r"c, "e"c}
Console.WriteLine("The original character array: {0}", New String(charArray))
greeting.CopyTo(0, charArray, 0, 5)
Console.WriteLine("The new character array: {0}", New String(charArray))
' The example displays the following output:
' The original character array: Where
' The new character array: Hello
String.Create
A String.Create metódussal programozottan kitöltheti egy új szöveg karaktereit egy visszahívás használatával. A visszahívás egy írható Span<T> karaktert és egy hívó által megadott állapotobjektumot kap, így köztes karakterpufferek kiosztása nélkül is létrehozhatja a sztring tartalmát. Maga a visszahívás is foglalhat erőforrásokat, például ha helyi változókat rögzít, vagy más, sok erőforrást foglaló API-kat hív meg.
A következő példa String.Create használja arra, hogy egymást követő ábécé karakterekből egy ötégtűs karakterláncot építsen fel.
string result = string.Create(5, 'a', (span, firstChar) =>
{
for (int i = 0; i < span.Length; i++)
{
span[i] = (char)(firstChar + i);
}
});
Console.WriteLine(result); // abcde
Module Program
Sub Main()
Dim result As String = String.Create(5, "a"c, Sub(span, firstChar)
For i As Integer = 0 To span.Length - 1
span(i) = ChrW(AscW(firstChar) + i)
Next
End Sub)
Console.WriteLine(result) ' abcde
End Sub
End Module
String.Create Olyan teljesítményérzékeny helyzetekhez készült, ahol előre ismeri a sztring végleges hosszát, és el szeretné kerülni a köztes karakterpufferek allokációját. A futtatókörnyezet lefoglal egy új szöveget, közvetlenül átadja a háttérpuffert a callback függvénynek Span<char>, és a visszahívás után visszaadja a változtathatatlan szöveget. A visszahívás befejeződése után nem történik másolat az adatokról.
String.Create és new String(Span<char>)
A sztringek hatékony elkészítésének másik lehetősége egy karakterpuffer lefoglalása stackalloc, kitöltése és átadása a String(ReadOnlySpan<char>) konstruktornak:
static string CreateStringFromSpan()
{
Span<char> span = stackalloc char[5];
for (int i = 0; i < 5; i++)
{
span[i] = (char)('a' + i);
}
return new string(span);
}
Console.WriteLine(CreateStringFromSpan()); // abcde
Mindkét módszer pontosan egyszer foglalja le a végső karakterláncot. A fő különbségek a következők:
-
stackalloc+new string(span)a munkapuffert a veremre helyezi. Ez a leggyorsabb a kis méretű, rögzített méretű pufferekhez, de a verem véges erőforrás; nagy vagy mélyen beágyazott foglalások okozhatnakStackOverflowException. Ez a példa a C#stackallocmintát mutatja be; A Visual Basic nem támogatjastackalloc, de akkor is meghívhatja aString(ReadOnlySpan<char>)konstruktort, ha rendelkezik egyReadOnlySpan<char>. -
String.Createa munkapuffert a halommemóriában foglalja le a karakterlánc objektum részeként, így nincs veremnyomás. Emellett elfogad egy beírt állapotparamétert is, amelyet a futtatókörnyezet boxolás nélkül továbbít a visszahívásnak, elkerülve a boxing-foglalásokat, ha az állapot referenciatípus vagy nem rögzített szerkezet. Általában előnyben részesíti astackalloc+new String(span)használatát kisebb sztringek esetén (általában néhány száz karakternél kevesebb), ismert, határolt mérettel. Akkor érdemes használniString.Create, ha a méret nagy lehet, ha el szeretné kerülni a veremnyomást, vagy ha az állapotot boxolás nélkül adja át a visszahívásnak.