String.Copy(String) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Dikkat
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
Parametreler
- str
- String
Kopyalanacak dize.
Döndürülenler
ile aynı değere strsahip yeni bir dize.
- Öznitelikler
Özel durumlar
str, null'e eşittir.
Açıklamalar
yöntemi, Copy özgün dizeyle aynı değere sahip olan ancak farklı bir nesne başvuruyu temsil eden bir nesne döndürür String . Ek bir nesne değişkenine var olan bir dize başvurusu atayan atama işleminden farklıdır.
Important
.NET Core 3.0'dan başlayarak bu yöntem kullanım dışıdır. Ancak, herhangi bir .NET uygulamasında kullanılmasını önermeyiz. Özellikle, .NET Core 3.0'da dize interningindeki değişiklikler nedeniyle, bazı durumlarda Copy yöntemi yeni bir dize oluşturmaz, ancak var olan bir interned dizeye başvuru döndürür.
yöntemini neden çağırmak istediğinize Copy bağlı olarak, bir dizi alternatif vardır:
Dizeyi değiştiren bir işlemde farklı bir dize örneğinin kullanılmasını istiyorsanız, özgün dize örneğini kullanın. Dizeler sabit olduğundan, dize işlemi yeni bir dize örneği oluşturur ve özgün dize etkilenmez. Bu durumda, özgün dize değişkenine yeni dize başvurusu atamamalısınız. Aşağıdaki örnek, bir gösterim sağlar.
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.Bu durumda, yöntemini çağırmadan
Copyönce yeni bir dize oluşturmak için yöntemini çağırmak Substring gereksiz yere yeni bir dize örneği oluşturur.Özgün dizeyle aynı içerikle değiştirilebilir bir arabellek oluşturmak istiyorsanız veya String.ToCharArray oluşturucuyu çağırınStringBuilder.StringBuilder(String). Örneğin:
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.Dize içeriğini değiştirmek için güvenli olmayan kod kullanabilmek için dizenin değiştirilebilir bir kopyasını oluşturmak istiyorsanız yöntemini kullanın Marshal.StringToHGlobalUni . Aşağıdaki örnek, kopyalanan dizenin yönetilmeyen bellekteki konumuna bir işaretçi almak için yöntemini kullanır Marshal.StringToHGlobalUni , dizedeki her karakterin Unicode kod noktasını bir artırır ve sonuçta elde edilen dizeyi yönetilen dizeye geri kopyalar.
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/'