1. ホーム
  2. .net

.NETのSystem.String.Copyの使い道は?

2023-08-08 10:25:43

質問

とてもくだらない質問で恐縮なのですが、何か見落としているのではないでしょうか。

なぜ 文字列.コピー(文字列) ?

ドキュメントによると、このメソッドは

指定されたStringと同じ値を持つStringの新しいインスタンスを作成します。 のインスタンスを作成します。

.NETでは文字列は不変なので、このメソッドを使うメリットは何だろうと考えてみると

 string copy = String.Copy(otherString);

と同じ結果になると思われます。

 string copy = otherString;

つまり、内部で行われている帳簿のようなものを除けば、コピーというのは ReferenceEquals でないという事実を除けば、観察可能な違いはありません。String は不変のクラスであり、その等式は同一性ではなく値に基づいています。 (@Andrew Hare 氏に、私の元の言い回しが Copy がないことを心配していたのです。 役に立つ という違いがあることを懸念していました)。

を渡されると、もちろん null 引数が渡されると、Copy は ArgumentNullException を投げ、新しいインスタンスがより多くのメモリを消費するかもしれません。後者はほとんど利点のように思えませんし、NULLチェックが全体のCopyメソッドを正当化するのに十分な大きなボーナスであるとは思えません。

ありがとうございます。

どのように解決するのですか?

とは String.Copy では、実際に新しいメモリを確保し、ある文字列から別の文字列に文字をコピーしています。これは、メモリ位置を直接処理し、文字列を変更できるアンマネージドコードで文字列を使用する場合に問題となる可能性があります。