2016-08-04 5 views
-1
String outputFile = String.Format("{0}\t{1}\t{2}\t{3}\r\n", x.url, x.company, x.country, x.vendor,); 

if (client.cf.is_cis == true) 
{ 
    outputFile = String.Format("{0}\r\n", x.cis); 
} 

if (client.cf.is_firmographic == true) 
{ 
    outputFile = String.Format("{0}\t{1}\r\n", x.revenue, x.employee); 
} 

writerCustomerTxt.Write(outputFile); 

私は出力しようとしている文字列がありますが、明らかに上記のコードではif文のいずれかが真であれば出力が上書きされています。私は文字列連結がこの問題の解決策であると信じています。これを行う最も効率的な方法は何でしょうか?文字列を連結する最適な方法

+6

[StringBuilder](https://msdn.microsoft.com/en-us/library/system.text.stringbuilder(v = vs.110).aspx)を使用して、[docs](http: //stackoverflow.com/documentation/c%23/4675/stringbuilder#t=201608042040323782465) – DavidG

+0

コードに連結がありません。 –

+0

@DavidG:指定されたコードサンプルに対してStringBuilderを使用する理由はありません。 – StriplingWarrior

答えて

4

それはあなたが尋ねるが、あなたの文字列を構築するStringBuilderを使用している、これは動作します正確に何を得るために少し難しいです:

StringBuilder builder = new StringBuilder(); 

builder.AppendFormat("{0}\t{1}\t{2}\t{3}\r\n", 
    x.url, x.company, x.country, x.vendor); 

if (client.cf.is_cis == true) 
{ 
    builder.AppendFormat("{0}\r\n", 
     x.cis); 
} 

if (client.cf.is_firmographic == true) 
{ 
    builder.AppendFormat("{0}\t{1}\r\n", 
     x.revenue, x.employee); 
} 

writerCustomerTxt.Write(builder.ToString()); 
+0

確率はかなり高く、文字列の連結よりも悪く実行されます。連結が2つあり、多くの場合0または1です。 – Servy

+1

あなたは正しいですが、私はこのコードが毎秒1000回呼び出されることはないと思われます。それはStringBuilderの素晴らしいイントロです。 – DavidG

+0

不適切なコンテキストでツールを使用する*は、ツールの紹介ではありません。それは他の同様に不適切な文脈でそれを使用することを奨励するだろう。それが実際に仕事のための適切なツールである状況でそれを使用することは、あなたが不適切にそれを使用する方法を学ぶことを意味するので、ツールを導入する正しい方法です。あなたは、より多くの*時間と努力を費やして、より少ない時間で効率的な道具を作って、いつ使わなければならないのかを表すあなたの道を離れます。 – Servy

0

文字列を連結する最も簡単な方法は、+=演算子を使用することです:あなたがこちらに任意の引数を渡していない場合、あなたは,をところで

String outputFile = String.Format("{0}\t{1}\t{2}\t{3}\r\n", x.url, x.company, x.country, x.vendor); 

if (client.cf.is_cis == true) 
{ 
    outputFile += String.Format("{0}\r\n", x.cis); 
} 

if (client.cf.is_firmographic == true) 
{ 
    outputFile += String.Format("{0}\t{1}\r\n", x.revenue, x.employee); 
} 

writerCustomerTxt.Write(outputFile); 

削除することができます。

String.Format("{0}\t{1}\t{2}\t{3}\r\n", x.url, x.company, x.country, x.vendor,); 
                      ^^^ 
関連する問題