C#のString.Copy()とString.CopyTo()メソッドの違いとは?
C#のString.Copy()とString.CopyTo()の違いとは?
C#には文字列をコピーするためのメソッドとして、名前がよく似たString.Copy()とString.CopyTo()の2つが用意されています。しかし、この2つは目的も動作もまったく異なります。
- String.Copy() … 文字列全体を複製し、同じ内容を持つ新しい文字列オブジェクトを作成する
- String.CopyTo() … 文字列の一部(指定範囲の文字)を、既存のchar型配列にコピーする
以下、それぞれのメソッドについて詳しく見ていきましょう。
String.CopyTo()メソッド:文字列の一部をchar型配列へコピー
String.CopyTo()は、ソース文字列から指定した位置以降の文字群を取り出し、char型配列の指定した位置へコピーします。引数は次の4つです。
- コピー元の開始インデックス
- コピー先のchar型配列
- 配列への書き込み開始インデックス
- コピーする文字数
サンプルコード
using System;
class Demo {
static void Main(String[] args) {
string str = "This is it!";
char[] ch = new char[5];
str.CopyTo(2, ch, 0, 2);
Console.WriteLine("Output...");
Console.WriteLine(ch);
}
}
実行結果
Output... is
この例では、文字列「This is it!」のインデックス2以降から2文字分(「is」)を、配列chの先頭にコピーしています。
String.Copy()メソッド:同じ内容の新しい文字列を作成
String.Copy()は、指定した文字列と同じ内容を持つ新しいstringオブジェクトを生成します。元の文字列とは独立した別インスタンスが作られる点がポイントです。
サンプルコード
using System;
class Demo {
static void Main(String[] args) {
string str1 = "Welcome!";
string str2 = "user";
str2 = String.Copy(str1);
Console.WriteLine("Output...");
Console.WriteLine(str2);
}
}
実行結果
Output... Welcome!
この例では、str1の内容「Welcome!」がstr2にコピーされ、str2を出力すると「Welcome!」と表示されます。
2つのメソッドの違いまとめ
| 項目 | String.Copy() | String.CopyTo() |
|---|---|---|
| コピー対象 | 文字列全体 | 文字列の一部(指定範囲) |
| コピー先 | 新しいstringオブジェクト | 既存のchar型配列 |
| 戻り値 | あり(新しい文字列) | なし(void) |
補足:String.Copy()は非推奨
.NET Core 3.0以降では、String.Copy()は非推奨(Obsolete)とされています。C#の文字列は不変(イミュータブル)であるため、単純に代入演算子(=)で参照を渡すだけで十分安全だからです。新規のコードでは、string str2 = str1;のように代入を使用することが推奨されています。
-
JavaScriptにおける関数とメソッドの違いとは?わかりやすく解説
JavaScriptにおいて、関数とメソッドは本質的には同じものです。両者の違いは、メソッドがオブジェクトのプロパティとして定義された関数であるという点にあります。つまり、独立して定義されたものを「関数」、オブジェクトに紐づけられたものを「メソッド」と呼びます。 JavaScriptの関数の基本形 まず、一般的な関数の定義方法を見てみましょう。 function functionname(param1, param2){ // 処理内容 } JavaScriptのメソッドの例 メソッドは、オブジェクトに関連付けられた関数です。次の例では、employeeオブジェクトの中にdetails
-
Pythonの文字列(str)とバイト文字列(bytes)の違いをわかりやすく解説
文字列とバイト文字列の基本的な違いPythonにおける文字列(str)は「文字」の並びであり、これは抽象的な概念です。そのため、そのままではディスクに保存することができません。一方、バイト文字列(bytes)は「バイト」の並びであり、実際にディスクへ保存できるデータです。この両者をつなぐのがエンコーディング(符号化方式)です。エンコーディングには非常に多くの種類があり(理論上は無限に存在します)、変換を行う際にはどのエンコーディングが使われているのかを正しく把握しておく必要があります。なぜエンコーディングの指定が重要なのか同じバイト列でも、解釈するエンコーディングが異なれば、まったく別の文字列