ほぼ毎日、次の形式のコードに出くわします。
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");
文字列リテラルも変数である可能性があると仮定します。
ある場合はまだ見つけていません。
あなたが持っている2つの例が最高だと思います。
唯一の異論は、連結の代わりにstringbuilderを使用した2番目のソリューションを使用して条件付きで多くの文字列を追加する必要がある場合、パフォーマンス、読みやすさ、および保守性を考慮すると、より良いソリューションになるはずです。
深くネストされていますか?:特に複数のフォークがある場合、構成を追跡するのは非常に難しい場合があります。
ちょうどどうですか:
string x = someTest ? "foobar" : "foo";