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.Equalsor String.IndexOfwithStringComparison.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;
    }
}
于 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

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

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

例如,而不是

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

考虑

if(Status.ToLower() == "accept") 
        return true;
    else 
        return false;
于 2013-03-09T11:42:39.493 回答
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 回答