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

定義

警告

この API は現在使われていません。

指定した String と同じ値を使用して、String の新しいインスタンスを作成します。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

パラメーター

str
String String String String

コピーする文字列。The string to copy.

戻り値

str と同じ値を持つ新しい文字列。A new string with the same value as str.

例外

注釈

メソッドCopyは、元Stringの文字列と同じ値を持ち、別のオブジェクト参照を表すオブジェクトを返します。The Copy method returns a String object that has the same value as the original string but represents a different object reference. これは代入演算とは異なり、既存の文字列参照を追加のオブジェクト変数に代入します。It differs from an assignment operation, which assigns an existing string reference to an additional object variable.

重要

.NET Core 3.0 以降では、このメソッドは互換性のために残されています。Starting with .NET Core 3.0, this method is obsolete. ただし、.NET の実装では使用しないことをお勧めします。However, we do not recommend its use in any .NET implementation. 特に、.net Core 3.0 では文字列インターンが変更されているため、 Copyメソッドは新しい文字列を作成せず、単に既存のインターン文字列への参照を返す場合があります。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.

Copyメソッドを呼び出す理由に応じて、いくつかの代替手段があります。Depending on Why you want to call the Copy method, there are a number of alternatives:

  • 文字列を変更する操作で別の文字列インスタンスを使用する場合は、元の文字列インスタンスを使用します。If you want a different string instance to use in an operation that modifies the string, use the original string instance. 文字列は不変であるため、文字列操作は新しい文字列インスタンスを作成し、元の文字列は影響を受けません。Because strings are immutable, the string operation creates a new string instance, and the original string remains unaffected. この場合、元の文字列変数に新しい文字列参照を割り当てないでください。In this case, you should not assign the new string reference to the original string variable. 具体的な例を次に示します。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.            
    

    この場合、メソッドを呼び出すCopySubstringに新しい文字列を作成するためにメソッドを呼び出すと、新しい文字列インスタンスが不必要に作成されます。In this case, calling the Copy method to create a new string before calling the Substring method unnecessarily creates a new string instance.

  • 元の文字列と同じ内容の変更可能なバッファーを作成する場合String.ToCharArrayは、コンストラクターまたはStringBuilder.StringBuilder(String)コンストラクターを呼び出します。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. 次に例を示します。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.        
    
  • アンセーフコードを使用して文字列の内容を変更できるように、文字列の変更可能なコピーを作成するMarshal.StringToHGlobalUni場合は、メソッドを使用します。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. 次の例ではMarshal.StringToHGlobalUni 、メソッドを使用して、アンマネージメモリ内のコピーされた文字列の位置へのポインターを取得し、文字列内の各文字の Unicode コードポイントを1だけインクリメントし、結果の文字列をマネージ文字列にコピーします。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/'      
    

適用対象