2010-11-19 1 views
0

私は自分自身を世界で最も優れた開発者とは考えていませんが、少なくとも文字列のリストをループすることができると思いました!からの余分な反復があるこのC#ループは、文字列のリストが奇妙なのはなぜですか?

First<br /> 
First<br /> 
Second<br /> 
First<br /> 
First<br /> 
Second<br /> 
Third<br /> 

public string liststrings() { 

     List<string> strings = new List<string>(); 
     strings.Add("First"); 
     strings.Add("Second"); 
     strings.Add("Third"); 

     string output = string.Empty; 

     for (int i = 0; i < strings.Count(); i++) 
     { 
      output += output + strings[i] + "<br />"; 
     } 

     return output; 
    } 

この機能は、次のHTMLを返します。

は、ここに私の機能ですか?

はFYI:私は、主にVBスクリプトの背景から来て、私は問題なくVBスクリプト内の配列でこれを行うことができます。リストやC#の構文が違うと、これは違うのですか?

ありがとうございました。

+1

毎回、私の答えがわかっているにもかかわらず私は答えていない質問があります - 答えが終わる頃に10の答えがあります:) – delnan

+1

ああああ...私はダムだ...長い一日の終わり...長い週。家に帰る準備ができている!みんな助けてくれてありがとう。 – quakkels

+0

ちょうど明確にするために、ループは奇妙ではありません。 :) – ChaosPandion

答えて

7

出力を2回追加しています。

output += output + strings[i] + "<br />"; 

と同等です:

あなたが使用することができ
output = output + output + strings[i] + "<br />"; 

output += strings[i] + "<br />"; 

より良いオプションは、StringBuilderかもしれません。

+1

私はこの答えが最初だと思うので...チェックマーク。助けてくれてありがとう...恥ずかしがり屋... – quakkels

+0

こんにちは、最初はどんな答えがいいですか、それは最高です。しかし、この場合、最初のものも本当に良いものだったので問題はありません:) –

+0

@quakkels 'string output = string.Concat(strings.Select(s => s +"
") ); '。たいていの場合、 'String.Join'や' String.Concat'を使うのが良いでしょう。そうすれば、変数を 'String'と' StringBuilder'の間でループを書く必要はありません。 –

2

出力の前の値を自身に2回追加するという事実から、余分な繰り返しが生じています。

output += output + strings[i] + "<br />"; 

私はあなたが私がStringBuilderクラスになり何をしているかから

output = output + strings[i] + "<br />"; 

または

output += strings[i] + "<br />"; 

しかし正直にしたいと思います。

7

あなたは代わりに以下を試し、各反復に戻って自分自身に文字列全体を追加する:

output += strings[i] + "<br />"; 
0

あなたはstrings.Count後に()を削除する必要があります。また、あなたは他の記事で述べたように、また

foreach(string str in strings) 
{ 
    // etc. 
} 

を使用することができ、あなたが二回出力を追加していること:

output += output + "something" 

output = output + output + "something" 
1

と同等であることが使用することをお勧めします文字列を連結する代わりにStringBuilderオブジェクトを使用します。

... 
StringBuilder sb = new StringBuilder(); 
for(int i = 0; i < strings.Length; i++) 
{ 
    sb.WriteLine("{0}<br />", strings[i]); 
} 
return sb.ToString(); 

それが高速であるため、純粋な配列のため.Lengthプロパティを使用するには注意してください。

関連する問題