String.Copy(String) String.Copy(String) String.Copy(String) String.Copy(String) Method

Definição

Aviso

Esta API agora é obsoleta.

Cria uma nova instância de String com o mesmo valor que um String especificado.Creates a new instance of String with the same value as a specified 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);
static member Copy : string -> string
Public Shared Function Copy (str As String) As String

Parâmetros

str
String String String String

A cadeia de caracteres a ser copiada.The string to copy.

Retornos

Uma nova cadeia de caracteres com o mesmo valor que str.A new string with the same value as str.

Exceções

Comentários

O Copy método retorna um String objeto que tem o mesmo valor de cadeia de caracteres original, mas representa uma referência de objeto diferente.The Copy method returns a String object that has the same value as the original string but represents a different object reference. Ele é diferente de uma operação de atribuição, que atribui uma referência de cadeia de caracteres existente a uma variável de objeto adicionais.It differs from an assignment operation, which assigns an existing string reference to an additional object variable.

Importante

Começando com o .NET Core 3.0, este método é obsoleto.Starting with .NET Core 3.0, this method is obsolete. No entanto, não recomendamos seu uso em qualquer implementação do .NET.However, we do not recommend its use in any .NET implementation. Em particular, devido a alterações na centralização da cadeia de caracteres no .NET Core 3.0, em alguns casos o Copy método não criará uma nova cadeia de caracteres, mas simplesmente retornará uma referência a uma cadeia de caracteres interno existente.In particular, because of changes in string interning in .NET Core 3.0, in some cases the Copy method will not create a new string but will simply return a reference to an existing interned string.

Dependendo por que você deseja chamar o Copy método, há uma série de alternativas:Depending on Why you want to call the Copy method, there are a number of alternatives:

  • Se você quiser uma instância de cadeia de caracteres diferente para usar em uma operação que modifica a cadeia de caracteres, use a instância de cadeia de caracteres original.If you want a different string instance to use in an operation that modifies the string, use the original string instance. Como cadeias de caracteres são imutáveis, a operação de cadeia de caracteres cria uma nova instância de cadeia de caracteres e cadeia de caracteres original permanece inalterada.Because strings are immutable, the string operation creates a new string instance, and the original string remains unaffected. Nesse caso, você deve atribuir a nova referência de cadeia de caracteres para a variável de cadeia de caracteres original.In this case, you should not assign the new string reference to the original string variable. O exemplo a seguir fornece uma ilustração.The following example provides an illustration.

    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.            
    
    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.            
    

    Nesse caso, chamando o Copy método para criar uma nova cadeia de caracteres antes de chamar o Substring método desnecessariamente cria uma nova instância de cadeia de caracteres.In this case, calling the Copy method to create a new string before calling the Substring method unnecessarily creates a new string instance.

  • Se você quiser criar um buffer mutável com o mesmo conteúdo que a cadeia de caracteres original, chame o String.ToCharArray ou StringBuilder.StringBuilder(String) construtor.If you want to create a mutable buffer with the same contents as the original string, call the String.ToCharArray or StringBuilder.StringBuilder(String) constructor. Por exemplo:For example:

    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.        
    
    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.        
    
  • Se você quiser criar uma cópia mutável da cadeia de caracteres para que você pode usar código não seguro para modificar o conteúdo de cadeia de caracteres, use Marshal.StringToHGlobalUni método.If you want to create a mutable copy of the string so that you can use unsafe code to modify the string contents, use Marshal.StringToHGlobalUni method. O exemplo a seguir usa o Marshal.StringToHGlobalUni incrementa o ponto de código Unicode de cada caractere na cadeia de caracteres em um método para obter um ponteiro para o local de uma cadeia de caracteres copiada na memória não gerenciada e copia a cadeia de caracteres resultante para uma cadeia de caracteres gerenciada.The following example uses the Marshal.StringToHGlobalUni method to get a pointer to the location of an copied string in unmanaged memory, increments the Unicode code point of each character in the string by one, and copies the resulting string back to a managed string.

    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/'      
    

Aplica-se a