2016-08-04 3 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

Вы правы, но я предположим, что этот код не будет называться тысячу раз в секунду, и это приятное введение в 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,); 
                      ^^^ 
Смежные вопросы