如何简化这个C#代码

本文关键字:代码 何简化 | 更新日期: 2023-09-27 18:03:01

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

如何简化这个C#代码

您可以使用短路评估来使代码更加精确。顺便说一句,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();
}
  1. 对于像这样的简单访问器,Property语法比方法更好
  2. String.EqualsString.IndexOfStringComparison.OrdinalIgnoreCase一起使用,而不是使用String.ToLower() ==。此外,如果您绝对必须规范化字符串,则使用String.ToUpperInvariant,因为它保留了在执行ToLowerInvariant时丢失的某些信息,这会影响非拉丁语言,如土耳其语,它具有类似I的特殊行为
  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;
    }
}

我会使用这样的三元运算符:

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

等等…

这个怎么样?

public bool IsAnyReviewState()
{
    return new [] {"accept", "refer"}.Contains((Status??string.empty).ToString().ToLower())
}
正如RvdK所说,这个问题应该在CodeReview上讨论。此外,我不确定您是想让代码更紧凑还是更可读。

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

例如,代替

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

考虑

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

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

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

这使您无需编写防御性的null检查,也不需要.ToLower()

更少的代码:=快乐的编码器

editStatus属性是否需要是string?你可以用枚举代替它吗?