如何简化这个C#代码

时间:2013-03-09 11:32:51

标签: c# visual-studio-2010

在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的一种简化方式,我还在学习。

7 个答案:

答案 0 :(得分:1)

这个怎么样?

public bool IsAnyReviewState()
{
    return new [] {"accept", "refer"}.Contains((Status??string.empty).ToString().ToLower())
}

答案 1 :(得分:1)

您可以使用短路评估来使代码更精确。 BTW。 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();
}

答案 2 :(得分:1)

  1. 对于像这样的简单访问器,Property语法比方法更好。
  2. String.EqualsString.IndexOfStringComparison.OrdinalIgnoreCase一起使用,而不是String.ToLower() ==。此外,如果你绝对必须规范化字符串,那么使用String.ToUpperInvariant,因为它保留了在执行ToLowerInvariant时丢失的某些信息,这会影响非拉丁语言,例如土耳其语,它具有类似I字符的特殊行为
  3. 考虑使用String.IsNullOrEmpty
  4. 请记住,布尔运算符本身会返回布尔值,因此您可以大规模简化IsAnyReviewState
  5. 以下是我编写代码的方法:

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

答案 3 :(得分:1)

我会这样使用ternary operators

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

答案 4 :(得分:0)

   public bool IsAccept()
    {
      return (Status == null)?false:(Status.ToLower() == "accept");
    }

等等......

答案 5 :(得分:0)

就个人而言,我更喜欢使用string.Equals进行字符串比较。在IsAccept()的情况下,我会写:

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

这使您免于撰写防御性null - 支票,并且不需要.ToLower()

少代码:=快乐的编码器

修改Status属性是否需要string?您可以将它替换为枚举吗?

答案 6 :(得分:0)

正如RvdK所说,这个问题应该在CodeReview。此外,我不确定您是否正在尝试使代码更紧凑或更易读。

如果您想让它更具可读性,那么唯一想到的就是修改return语句。

例如,而不是

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

考虑

if(Status.ToLower() == "accept") 
        return true;
    else 
        return false;