この式を単純化する方法はありますか:
私はこれをしたい:
d = ( a == "x" ? b : a )
次の 3 行のコードを使用できます。
d = a;
if(a == "x")
d = b
2回使わずに、 1行のコード/1つの式でそれを行うことはできますか?
この式を単純化する方法はありますか:
私はこれをしたい:
d = ( a == "x" ? b : a )
次の 3 行のコードを使用できます。
d = a;
if(a == "x")
d = b
2回使わずに、 1行のコード/1つの式でそれを行うことはできますか?
2回使わずに、1行のコード/1つの式でそれを行うことはできますか?
はい、しかしあなたは本当にすべきではありません:
d = new[] { a }.Except("x").DefaultIfEmpty(b);
私はこれを真剣に提案しているわけではありません.あなたの基準が「読みやすい」ための良い指標ではないことを指摘しているだけです.
これを頻繁に行う場合は、拡張メソッドを記述できます。
public static string OrDefaultFor(this string input,
string invalidInput,
string replacement)
{
return input == invalidInput ? replacement : input;
}
それで:
d = a.OrDefaultFor("x", b);
できればもっといい名前を選んでください:)
私はa
何らかの副作用を引き起こすと仮定しています。そのため、2 回使用することはできません。(多分それは関数、またはプロパティなどです。)
あなたは 2 番目のコード スニペットに近づいていましたが、以下を使用したいと考えています。
d = a;
if(d == "x")
d = b
そこの重要なポイントは、もう一度ではなく、で使用d
することです。if
a
コードの行数を本当に減らしたい場合は、代わりにこれを使用できます。
d = a;
if(d == "x") d = b
おめでとうございます。コードは 2 行になりました。それを超えて、コードを「単純化」しようとすることは、何らかの形で利益よりも害をもたらす可能性があります。このように、コードの意図は非常に明確です。の結果のローカル コピーを作成し、a
を使用するか、 を使用するかを決定a
しb
ますif
。
d = (d = a) == "x" ? b : d;
前述のように、質問は間違っており、答えはさらに悪いものです。