Как поместить строку в новую строку?

Я работаю со строками в С#. У меня есть строка вроде

StringBuilder sb = new StringBuilder();
sb.AppendLine(ValidatorMethod1());
sb.AppendLine(ValidatorMethod2());

после того, как «sb» вызывается для ValidatorMethod1(), я вызываю ValidatorMethod2(), как показано, оба возвращают сообщение об ошибке в виде строки на основе условия. Если ValidatorMethod1() и ValidatorMethod2() возвращают сообщение об ошибке, то все в порядке. Но если ValidatorMethod2() терпит неудачу, то длина сообщения об ошибке, возвращаемого из ValidatorMethod2(), равна «0», но все же к строке добавляется «sb», и, таким образом, после сообщения об ошибке ValidatorMethod1() добавляется пустая строка ошибки.

Я пытался гуглить, но ссылки типа:

Поэтому, пожалуйста, кто-нибудь может подсказать, "поместить возвращаемую строку в новую строку, если ее длина больше нуля" или ничего не делать?

РЕДАКТИРОВАТЬ:

Привет всем, я думаю, я не получил правильное решение, которое я ищу. Я не хочу добавлять строку после каждого "sb". Но если у меня есть сообщение об ошибке, я хочу добавить NEWLINE.. Может ли кто-нибудь дать мне другое решение, которое соответствует моим потребностям?..


person user2771399    schedule 03.12.2013    source источник
comment
Что вы подразумеваете под строкой в новой строке? Это само по себе нонсенс.   -  person Grant Thomas    schedule 03.12.2013
comment
Скорее всего просто неправильное употребление предлога.   -  person Colin Mackay    schedule 03.12.2013
comment
Строка в новой строке, под которой я подразумеваю, только если метод ValidatorMethod2() возвращает сообщение об ошибке, его следует поместить в новую строку, вставленную ValidatorMethod1(), иначе я не хочу, чтобы новая строка появлялась с ПУСТОЙ строкой.   -  person user2771399    schedule 03.12.2013


Ответы (6)


Вы можете использовать String.IsNullOrEmpty, чтобы увидеть, имеет ли результат длину больше 0

Например:

string result = ValidatorMethod2();
if (!String.IsNullOrEmpty(result))
   sb.AppendLine(result);
person David Pilkington    schedule 03.12.2013

Есть ли причина, по которой вы не проверяете это сами? Это вряд ли добавит каких-либо заметных накладных расходов:

StringBuilder sb = new StringBuilder();

String msg;

msg = ValidatorMethod1();
if (msg.Length > 0)
    sb.AppendLine(msg);

msg = ValidatorMethod2();
if (msg.Length > 0)
    sb.AppendLine(msg);

На самом деле, нет более быстрого способа. Даже если бы Microsoft предоставила некоторую встроенную функциональность, она не сделала бы ничего существенно другого.

person Mario    schedule 03.12.2013

Вы можете использовать этот код для каждого валидатора:

string error = null;

// repeat for each validator
error = ValidatorMethod1();
if (!String.IsNullOrEmpty(error)) sb.AppendLine(error);
person Szymon    schedule 03.12.2013

Вы можете сделать:

string sb1 = ValidatorMethod1();
string sb2 = ValidatorMethod2();
if (sb1 != "") sb.AppendLine(sb1);
if (sb2 != "") sb.AppendLine(sb2);
person Peaceman71    schedule 03.12.2013

Вы можете попробовать сделать что-то подобное (вызов AppendLine перед каждой непустой строкой, если sb содержит текст):

StringBuilder sb = new StringBuilder();

String message = ValidatorMethod1();

if (!String.IsNullOrEmpty(message))
  sb.Append(message);

message = ValidatorMethod2();

if (!String.IsNullOrEmpty(message)) {
  if (sb.Length > 0)
    sb.AppendLine();

  sb.Append(message);
}

в общем случае, когда у вас много валидаторов:

StringBuilder sb = new StringBuilder();

foreach(String result in getValidatorsResults()) {
  if (String.IsNullOrEmpty(result)) 
    continue;

  if (sb.Length > 0)
    sb.AppendLine();

  sb.Append(result);
}
person Dmitry Bychenko    schedule 03.12.2013

Если вы работаете с набором методов проверки, вы можете рассмотреть что-то вроде этого:

var validationMethods = new Func<string>[]
{
    () => ValidationMethod1(),
    () => ValidationMethod2(),
    // Add more validtion methods here
};
string error = string.Join(Environment.NewLine, validationMethods.Select(validationMethod => validationMethod()).Where(message=> !string.IsNullOrEmpty(message)));

Это решение легко масштабируется, если вам нужно изменить количество методов проверки, которые вы хотите запустить в последовательности, или когда вы даже хотите иметь динамическое количество методов проверки (тогда вместо этого вы должны использовать что-то вроде List<Func<string>>).

person Xilconic    schedule 03.12.2013