我正在使用C#中的字符串。我有一个字符串,
StringBuilder sb = new StringBuilder();
sb.AppendLine(ValidatorMethod1());
sb.AppendLine(ValidatorMethod2());
在ValidatorMethod1()
上调用“sb”后,如图所示调用ValidatorMethod2()
,两者都根据条件返回错误消息作为字符串。如果ValidatorMethod1()
和ValidatorMethod2()
返回错误消息,则一切正常。但是如果ValidatorMethod2()
失败,那么从ValidatorMethod2(
返回的错误消息的长度是“0”,但仍然有一行附加“sb”,因此在{{{{}}之后附加一个空的错误行。 1}}的错误信息。
我尝试使用Google搜索,但链接如下:
所以请任何人都可以提出一个想法,“如果长度大于零,则将返回的字符串放在换行符中”或什么都不做?
编辑:
大家好, 我想我会得到适当的解决方案,我正在寻找。我不想在每个“sb”之后追加一行。但是,如果我有一个错误消息,那么,我想放入NEWLINE .. 有人可以给我一个满足我需要的不同解决方案吗?..
答案 0 :(得分:5)
您可以String.IsNullOrEmpty
查看结果的长度是否大于0
例如:
string result = ValidatorMethod2();
if (!String.IsNullOrEmpty(result))
sb.AppendLine(result);
答案 1 :(得分:2)
你有什么理由不是自己检查一下吗?这几乎不会增加任何明显的开销:
StringBuilder sb = new StringBuilder();
String msg;
msg = ValidatorMethod1();
if (msg.Length > 0)
sb.AppendLine(msg);
msg = ValidatorMethod2();
if (msg.Length > 0)
sb.AppendLine(msg);
事实上,没有更快的方法。即使微软提供了一些内置功能,也不会有明显的不同。
答案 2 :(得分:0)
您可以将此代码用于每个验证器:
string error = null;
// repeat for each validator
error = ValidatorMethod1();
if (!String.IsNullOrEmpty(error)) sb.AppendLine(error);
答案 3 :(得分:0)
您可以尝试做类似的事情(如果sb包含任何文本,则在每个非空字符串之前调用AppendLine):
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);
}
答案 4 :(得分:0)
你可以这样做:
string sb1 = ValidatorMethod1();
string sb2 = ValidatorMethod2();
if (sb1 != "") sb.AppendLine(sb1);
if (sb2 != "") sb.AppendLine(sb2);
答案 5 :(得分:0)
如果您正在使用一组验证方法,您可能需要考虑这样的事情:
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)));
如果您需要更改要在序列中运行的验证方法的数量,或者您甚至想要拥有动态数量的验证方法,那么此解决方案很容易扩展(那么您应该使用{{1而不是)。