String.Copy(String) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Attenzione
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
Parametri
- str
- String
Stringa da copiare.
Restituisce
Nuova stringa con lo stesso valore di str
.
- Attributi
Eccezioni
str
è null
.
Commenti
Il Copy
metodo restituisce un oggetto con lo stesso valore della stringa String originale, ma che rappresenta un riferimento a un oggetto diverso. Differisce da un'operazione di assegnazione, che assegna un riferimento di stringa esistente a una variabile oggetto aggiuntiva.
Importante
A partire da .NET Core 3.0, questo metodo è obsoleto. Tuttavia, non è consigliabile usarlo in alcuna implementazione di .NET. In particolare, a causa di modifiche nell'interning di stringhe in .NET Core 3.0, in alcuni casi il metodo non creerà una nuova stringa, ma restituirà semplicemente un riferimento a una stringa interna Copy
esistente.
A seconda del motivo per cui si vuole chiamare Copy
il metodo , esistono diverse alternative:
Se si vuole usare un'istanza di stringa diversa in un'operazione che modifica la stringa, usare l'istanza di stringa originale. Poiché le stringhe non sono modificabili, l'operazione di stringa crea una nuova istanza di stringa e la stringa originale rimane invariata. In questo caso, non è consigliabile assegnare il nuovo riferimento di stringa alla variabile stringa originale. Nell'esempio seguente viene illustrato questo concetto.
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.
In questo caso, la chiamata al metodo per creare una nuova stringa prima di chiamare il metodo crea
Copy
Substring inutilmente una nuova istanza di stringa.Se si vuole creare un buffer modificabile con lo stesso contenuto della stringa originale, chiamare il String.ToCharArray costruttore StringBuilder.StringBuilder(String) o . Ad esempio:
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.
Se si desidera creare una copia modificabile della stringa in modo che sia possibile usare codice unsafe per modificare il contenuto della stringa, usare Marshal.StringToHGlobalUni il metodo . Nell'esempio seguente viene utilizzato il metodo per ottenere un puntatore alla posizione di una stringa copiata nella memoria non gestita, incrementa di uno il punto di codice Unicode di ogni carattere nella stringa e copia di nuovo la stringa risultante in una Marshal.StringToHGlobalUni stringa gestita.
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/'