几乎每天我都会遇到以下形式的代码:
string x = "foo" + (someTest ? "bar" : "");
只有当某个值为真时,肯定有更好的方法来简洁地附加一个字符串?
这个:
string x = "foo";
if (someTest)
x += "bar";
不满足我的胃口,因为我经常想直接使用字符串(例如作为函数参数),而不是将其存储在变量中。
几乎每天我都会遇到以下形式的代码:
string x = "foo" + (someTest ? "bar" : "");
只有当某个值为真时,肯定有更好的方法来简洁地附加一个字符串?
这个:
string x = "foo";
if (someTest)
x += "bar";
不满足我的胃口,因为我经常想直接使用字符串(例如作为函数参数),而不是将其存储在变量中。
扩展方法呢?
string x = "foo".AppendIf(someTest, "bar");
public static string AppendIf(this string value, bool expression, string append)
{
return expression
? value + append;
: value;
}
为什么不编写自己的扩展方法来做到这一点?
public static string AppendIf(this string value, string toAppend, bool condition)
{
return condition ? String.Format("{0}{1}", value, toAppend) : value;
}
使用扩展
public static class StringExtensions
{
public static string AppendIf(this string s, bool condition, string append)
{
return condition ? s + append : s;
}
}
string x = "Foo";
x.AppendIf(someTest, "bar");
// or even
string y = "Foo".AppendIf(someTest, "bar");
假设字符串文字也可以是变量:
如果有我还没有找到。
我认为你的两个例子是最好的。
唯一的反对意见是,如果您需要使用带有 stringbuilder 的第二个解决方案而不是串联有条件地添加许多字符串,那么考虑到性能、可读性和可维护性,应该是一个更好的解决方案。
深嵌套?: 构造可能很难遵循,尤其是在有多个分叉的情况下。
怎么样:
string x = someTest ? "foobar" : "foo";