String.Copy(String) Yöntem

Tanım

Dikkat

This API should not be used to create mutable strings. See https://go.microsoft.com/fwlink/?linkid=2084035 for alternatives.

StringBelirtilen değerle aynı değere sahip yeni bir örneğini oluşturur String .

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

String

İle aynı değere sahip yeni bir dize str .

Öznitelikler

Özel durumlar

str, null değeridir.

Açıklamalar

CopyYöntemi, String özgün dizeyle aynı değere sahip olan ancak farklı bir nesne başvurusunu temsil eden bir nesne döndürür. Bu, varolan bir dize başvurusunu ek bir nesne değişkenine atayan atama işleminden farklıdır.

Önemli

.NET Core 3,0 ile başlayarak bu yöntem artık kullanılmıyor. Ancak, herhangi bir .NET uygulamasında kullanımını önermiyoruz. Özellikle, .NET Core 3,0 ' de bulunan dizedeki değişiklikler nedeniyle, bazı durumlarda Copy Yöntem yeni bir dize oluşturmaz ancak var olan bir dizeye bir başvuru döndürür.

Yöntemi neden çağırmak istediğinize bağlı olarak Copy , birkaç seçenek vardır:

  • Dizeyi değiştiren bir işlemde kullanmak için farklı bir dize örneği 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 etkilenmeden kalır. Bu durumda, yeni dize başvurusunu özgün dize değişkenine 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.
    

    Bu durumda, Copy yöntemi çağrılmadan önce yeni bir dize oluşturmak için yöntemini çağırmak Substring gereksiz bir yeni dize örneği oluşturur.

  • Özgün dizeyle aynı içeriğe sahip kesilebilir bir arabellek oluşturmak istiyorsanız, String.ToCharArray veya StringBuilder.StringBuilder(String) oluşturucusunu çağırın. Örnek:

    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.
    
  • Dize içeriklerini değiştirmek için güvenli olmayan kod kullanabilmeniz için dizenin değişebilir bir kopyasını oluşturmak istiyorsanız Marshal.StringToHGlobalUni yöntemini kullanın. Aşağıdaki örnek, Marshal.StringToHGlobalUni yönetilmeyen bellekteki kopyalanmış bir dizenin konumuna bir işaretçi almak için yöntemini kullanır, dizedeki her bir karakterin Unicode kod noktasını artırır ve elde edilen dizeyi bir 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/'
    

Şunlara uygulanır