String.Copy(String) Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Let op
This API should not be used to create mutable strings. See https://go.microsoft.com/fwlink/?linkid=2084035 for alternatives.
public:
static System::String ^ Copy(System::String ^ str);
[System.Obsolete("This API should not be used to create mutable strings. See https://go.microsoft.com/fwlink/?linkid=2084035 for alternatives.")]
public static string Copy(string str);
public static string Copy(string str);
[<System.Obsolete("This API should not be used to create mutable strings. See https://go.microsoft.com/fwlink/?linkid=2084035 for alternatives.")>]
static member Copy : string -> string
static member Copy : string -> string
Public Shared Function Copy (str As String) As String
Parameters
- str
- String
De tekenreeks die moet worden gekopieerd.
Retouren
Een nieuwe tekenreeks met dezelfde waarde als str.
- Kenmerken
Uitzonderingen
str is null.
Opmerkingen
De Copy methode retourneert een String object met dezelfde waarde als de oorspronkelijke tekenreeks, maar vertegenwoordigt een andere objectverwijzing. Het verschilt van een toewijzingsbewerking, waarmee een bestaande tekenreeksverwijzing wordt toegewezen aan een extra objectvariabele.
Important
Vanaf .NET Core 3.0 is deze methode verouderd. We raden het gebruik echter niet aan in een .NET implementatie. In sommige gevallen maakt de methode Copy geen nieuwe tekenreeks, maar retourneert in sommige gevallen een verwijzing naar een bestaande interne tekenreeks vanwege wijzigingen in tekenreeksen die intern worden uitgevoerd in .NET Core 3.0.
Afhankelijk van waarom u de Copy methode wilt aanroepen, zijn er een aantal alternatieven:
Als u een ander tekenreeksexemplaren wilt gebruiken in een bewerking die de tekenreeks wijzigt, gebruikt u het oorspronkelijke tekenreeksexemplaren. Omdat tekenreeksen onveranderbaar zijn, maakt de tekenreeksbewerking een nieuw tekenreeksexemplaren en blijft de oorspronkelijke tekenreeks ongewijzigd. In dit geval moet u de nieuwe tekenreeksreferentie niet toewijzen aan de oorspronkelijke tekenreeksvariabele. In het volgende voorbeeld ziet u een afbeelding.
var original = "This is a sentence. This is a second sentence."; var sentence1 = original.Substring(0, original.IndexOf(".") + 1); Console.WriteLine(original); Console.WriteLine(sentence1); // The example displays the following output: // This is a sentence. This is a second sentence. // This is a sentence.let original = "This is a sentence. This is a second sentence." let sentence1 = original.Substring(0, original.IndexOf "." + 1) printfn $"{original}" printfn $"{sentence1}" // The example displays the following output: // This is a sentence. This is a second sentence. // This is a sentence.Dim original = "This is a sentence. This is a second sentence." Dim sentence1 = original.Substring(0, original.IndexOf(".") + 1) Console.WriteLine(original) Console.WriteLine(sentence1) ' The example displays the following output: ' This is a sentence. This is a second sentence. ' This is a sentence.In dit geval roept u de
Copymethode aan om een nieuwe tekenreeks te maken voordat u de Substring methode aanroept, onnodig een nieuw tekenreeksexemplaren maakt.Als u een onveranderbare buffer wilt maken met dezelfde inhoud als de oorspronkelijke tekenreeks, roept u de String.ToCharArray of StringBuilder.StringBuilder(String) constructor aan. Voorbeeld:
private static void UseMutableBuffer() { var original = "This is a sentence. This is a second sentence."; var chars = original.ToCharArray(); var span = new Span<char>(chars); var slice = span.Slice(span.IndexOf('.'), 3); slice = MergeSentence(slice); Console.WriteLine($"Original string: {original}"); Console.WriteLine($"Modified string: {span.ToString()}"); static Span<char> MergeSentence(Span<char> span) { if (span.Length == 0) return Span<char>.Empty; span[0] = ';'; span[2] = Char.ToLower(span[2]); return span; } } // The example displays the following output: // Original string: This is a sentence. This is a second sentence. // Modified string: This is a sentence; this is a second sentence.let mergeSentence (span: Span<char>) = if span.Length = 0 then Span<char>.Empty else span[0] <- '\000' span[2] <- Char.ToLower span[2] span let useMutableBuffer () = let original = "This is a sentence. This is a second sentence." let chars = original.ToCharArray() let span = Span chars let slice = span.Slice(span.IndexOf '.', 3) let slice = mergeSentence slice let span = span.ToString() printfn $"Original string: {original}" printfn $"Modified string: {span}" // The example displays the following output: // Original string: This is a sentence. This is a second sentence. // Modified string: This is a sentence this is a second sentence.Private Sub UseMutableBuffer() Dim original = "This is a sentence. This is a second sentence." Dim sb = new StringBuilder(original) Dim index = original.IndexOf(".") sb(index) = ";" sb(index + 2) = Char.ToLower(sb(index + 2)) Console.WriteLine($"Original string: {original}") Console.WriteLine($"Modified string: {sb.ToString()}") End Sub ' The example displays the following output: ' Original string: This is a sentence. This is a second sentence. ' Modified string: This is a sentence; this is a second sentence.Als u een onveranderbare kopie van de tekenreeks wilt maken, zodat u onveilige code kunt gebruiken om de inhoud van de tekenreeks te wijzigen, gebruikt u de Marshal.StringToHGlobalUni methode. In het volgende voorbeeld wordt de Marshal.StringToHGlobalUni methode gebruikt om een aanwijzer naar de locatie van een gekopieerde tekenreeks in onbeheerd geheugen op te halen, het Unicode-codepunt van elk teken in de tekenreeks met één te verhogen en de resulterende tekenreeks terug te kopiëren naar een beheerde tekenreeks.
private static void UseUnmanaged() { var original = "This is a single sentence."; var len = original.Length; var ptr = Marshal.StringToHGlobalUni(original); string? result; unsafe { char *ch = (char *) ptr.ToPointer(); while (len-- > 0) { char c = Convert.ToChar(Convert.ToUInt16(*ch) + 1); *ch++ = c; } result = Marshal.PtrToStringUni(ptr); Marshal.FreeHGlobal(ptr); } Console.WriteLine($"Original string: {original}"); Console.WriteLine($"String from interop: '{result}'"); } // The example displays the following output: // Original string: This is a single sentence. // String from interop: 'Uijt!jt!b!tjohmf!tfoufodf/'#nowarn "9" open FSharp.NativeInterop let useUnmanaged () = let original = "This is a single sentence." let mutable len = original.Length let ptr = Marshal.StringToHGlobalUni original let mutable ch = ptr.ToPointer() |> NativePtr.ofVoidPtr<char> while len > 0 do len <- len - 1 Convert.ToUInt16(NativePtr.read ch) + 1us |> Convert.ToChar |> NativePtr.write (NativePtr.add ch 1) ch <- NativePtr.add ch 1 let result = Marshal.PtrToStringUni ptr Marshal.FreeHGlobal ptr printfn $"Original string: {original}" printfn $"String from interop: '{result}'" // The example displays the following output: // Original string: This is a single sentence. // String from interop: 'Uijt!jt!b!tjohmf!tfoufodf/'