2017-05-22 11 views
-7

これらの2行のコードの違いは何ですか?C#の配列内の要素を変更する

  1. arrayOneF[i + 1].Replace(arrayOneF[i + 1], "x");

  2. arrayOneF[i + 1] = arrayOneF[i + 1].Replace(arrayOneF[i + 1], "x");

数2のコードが必要な結果を与えるのに対し、ナンバーワンでは、行が実行されますが、私が望むものを与えるものではありません。なぜ要素[i + 1]をコードと同じにする必要がありますか?要素に変更を加えるのに十分な数字のコードはありませんか?

+2

1は配列内のオブジェクトに対してメソッドを呼び出します。 2は配列内のオブジェクトをそのメソッド呼び出しの戻り値で置き換えます。あなたがここでやろうとしていることを推測させる質問の目的はありますか?一度ドキュメンテーションのページに噛まれてしまったのですが、今ではマニュアルを読むことを恐れていますか?私は共感しますが、唯一のことはそのポニー、カウボーイに戻ることです! –

+0

これを試してください: 'string a =" food "; a.Replace( "o"、 "e"); Console.WriteLine(a); 'コンソールは「食べ物」を書きます。一方、 'string a =" food ";文字列b = a.Replace( "o"、 "e"); ConsoleWriteLine(b); 'は' feed'を書き込みます。 – phoog

答えて

2

C#の文字列は不変です。 Replaceは新しい文字列を返します。どのような方法でも元の文字列は変更されません。したがって、最初の例では、新しい文字列を作成してすぐにそれを破棄しています。

+0

これは正解です。ここでの誤解はReplaceメソッドの性質にあります。配列とは何の関係もありません。編集:まあ、他の答えも正しいですが、これは問題の明確なステートメントです。 – phoog

3

Replaceは、どのようなデータでも新しいインスタンスを返します。ソースデータの値を置き換えません。そのため、最初の例では、置換が行われ、新しい値として返されます。それは何にも割り当てられていないので、失われます。

実際には、置換結果をキャプチャして、値を同じ配列位置に戻します。

1

最初の行は、付属のパラメータを使用してarrayOneF[i + 1]に格納されているオブジェクトのうち、Replaceメソッドを呼び出します。コードからは、文字列のように見えます。

文字列として使用されないため、結果は返されて破棄されます。元の文字列は変更されません。なぜなら、C#のスティングは不変であるからです。

2番目の行は同じですが、戻り値のみが配列の同じスロットに割り当てられます。

関連する問題