nullまたは "00"の値に基づいてgetからの戻り値

誰かがこれが正当なコードかどうか教えてもらえますか?

get
{
    return string.IsNullOrEmpty(TopicID) ? null : 
           TopicID == "00" ? "All Topics" :     
           int.Parse(TopicID).ToString();
}

getはnullを返し、 "00"の場合は "All Topics"を返し、先行ゼロを付けずに数値を返します。

コードが乱雑に見えますが、コード化するためのよりクリーンな方法があるかどうかはわかりません。

0

3 答え

コンパイラは、それが有効なコードであるかどうかをあなたに伝えます:)

条件演算子の代わりに if if ステートメントを使用することを推奨する人もいます。私は条件付き演算子で十分満足していますが、わかりやすくするために書式を変更します。

return string.IsNullOrEmpty(TopicID) ? null 
    : TopicID == "00" ? "All Topics" 
    : int.Parse(TopicID).ToString();

これはこのパターンの一例です:

[assignment or return] = condition-1 ? value-1
    : condition-2 ? value-2
    : condition-3 ? value-3
      ...
    : fallback-value;

私はこのパターンが非常に有用で読みやすいと感じました。 F#のような少しのように見えるという事実は完全に偶然です:)

5
追加された
Jon、この種の書式設定は完璧で、私が探していたものです。今それはもっときれいに見えます。
追加された 著者 Samantha J T Star,

それは有効ですが、実際には面倒です。 / else の場合は標準のを使用すると、

get
{
    int id;
    if (!int.TryParse(TopicID, out id))
    {
        return null;
    }
    return id == 0 ? "All Topics" : id.ToString();
}
1
追加された

それは大丈夫です - 私はより明確にその意図を明らかにしようとします

return (string.IsNullOrEmpty(TopicID) ? null 
               : (TopicID == "00" ? "All Topics" 
                          : int.Parse(TopicID).ToString()));
1
追加された