0

vs2010 C# でこれを記述するより良い方法はありますか?

   public bool IsAccept()
    {
        //check the status is accept
        if (Status == null)
            return false;
        return Status.ToLower() == "accept";
    }

    public bool IsRefer()
    {
        //check the status is refer
        if (Status == null)
            return false;
        return Status.ToLower() == "refer";
    }


    public bool IsAnyReviewState()
    {
        if (IsAccept() || IsRefer())
            return true;
        return false;
    }

たぶん、私がまだ学んでいる C# 4 の単純化された方法です。

4

7 に答える 7

1

短絡評価を使用して、コードをもう少し正確にすることができます。ところで。これに固有のC#4はありません。

public bool IsAccept()
{
    //check the status is accept
    return Status != null && Status.ToLower() == "accept";
}

public bool IsRefer()
{
    //check the status is refer
    return Status != null && Status.ToLower() == "refer";
}


public bool IsAnyReviewState()
{
    return IsAccept() || IsRefer();
}
于 2013-03-09T11:37:42.400 に答える
1
  1. このような単純なアクセサーの場合、プロパティ構文はメソッドよりも優れています。
  2. を行う代わりにString.EqualsまたはString.IndexOfを使用します。また、文字列を絶対に正規化する必要がある場合は、実行時に失われる特定の情報を保持するために使用します。これは、Iのような文字の特殊な動作を持つトルコ語などの非ラテン語に影響します。StringComparison.OrdinalIgnoreCaseString.ToLower() ==String.ToUpperInvariantToLowerInvariant
  3. 使用を検討してくださいString.IsNullOrEmpty
  4. ブール演算子はブール値自体を返すため、大幅に簡略化できることに注意してくださいIsAnyReviewState

これが私があなたのコードを書く方法です:

public bool IsAccept {
    get {
        return String.IsNullOrEmpty( this.Status ) ? false : this.Status.Equals("accept", StringComparison.OrdinalIgnoreCase);
    }
}

public bool IsRefer {
    get {
        return String.IsNullOrEmpty( this.Status ) ? false : this.Status.Equals("refer", StringComparison.OrdinalIgnoreCase);
    }
}

public bool IsAnyReviewState {
    get {
        return this.IsAccept || this.IsRefer;
    }
}
于 2013-03-09T11:37:43.040 に答える
1

私は次のような三項演算子を使用します:

  public bool IsAccept()
    {
        //check the status is accept
        return Status == null ? false : Status.ToLower() == "accept";
    }
于 2013-03-09T11:38:31.500 に答える
0
   public bool IsAccept()
    {
      return (Status == null)?false:(Status.ToLower() == "accept");
    }

等々...

于 2013-03-09T11:37:14.403 に答える
0

これはどう?

public bool IsAnyReviewState()
{
    return new [] {"accept", "refer"}.Contains((Status??string.empty).ToString().ToLower())
}
于 2013-03-09T11:37:17.143 に答える
0

個人的には、string.Equals文字列の比較に使用することを好みます。の場合IsAccept()、私は次のように書きます。

public bool IsAccept()
{
   return string.Equals(Status, "accept", StringComparison.InvariantCultureIgnoreCase);
}

これにより、防御的なチェックを書くnull必要がなくなり、を必要としません.ToLower()

より少ないコード:=幸せなコーダー

編集Statusプロパティは?である必要がありstringますか?多分列挙のためにそれを置き換えることができますか?

于 2013-03-09T11:39:07.597 に答える
0

RvdK が言ったように、この質問はCodeReviewにあるはずです。また、コードをよりコンパクトにしようとしているのか、読みやすくしようとしているのかもわかりません。

読みやすくしようとしている場合、頭に浮かぶ唯一のことは、returnステートメントを変更することです。

たとえば、代わりに

return Status.ToLower() == "accept";

検討

if(Status.ToLower() == "accept") 
        return true;
    else 
        return false;
于 2013-03-09T11:42:39.493 に答える