-8

この式を単純化する方法はありますか:

私はこれをしたい:

d = ( a == "x" ? b : a ) 

次の 3 行のコードを使用できます。

d = a;
if(a == "x")
   d = b

2回使わずに 1行のコード/1つの式でそれを行うことはできますか?

4

3 に答える 3

9

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);

できればもっといい名前を選んでください:)

于 2012-11-29T15:12:39.053 に答える
1

私はa何らかの副作用を引き起こすと仮定しています。そのため、2 回使用することはできません。(多分それは関数、またはプロパティなどです。)

あなたは 2 番目のコード スニペットに近づいていましたが、以下を使用したいと考えています。

d = a;
if(d == "x")
   d = b

そこの重要なポイントは、もう一度ではなく、で使用dすることです。ifa

コードの行数を本当に減らしたい場合は、代わりにこれを使用できます。

d = a;
if(d == "x") d = b

おめでとうございます。コードは 2 行になりました。それを超えて、コードを「単純化」しようとすることは、何らかの形で利益よりも害をもたらす可能性があります。このように、コードの意図は非常に明確です。の結果のローカル コピーを作成し、aを使用するか、 を使用するかを決定abますif

于 2012-11-29T15:24:49.150 に答える
0
d = (d = a) == "x" ? b : d;

前述のように、質問は間違っており、答えはさらに悪いものです。

于 2012-11-29T15:28:41.793 に答える