2013-03-09 98 views
0

有没有更好的方式来写在vs2010 C#中?如何简化这个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中的简化方法。

+8

属于http://codereview.stackexchange.com/ – RvdK 2013-03-09 11:34:00

+0

难道这是迁移到codereview.stackexchange.com而不是关闭? – 2013-03-09 15:41:06

回答

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

等等......

1

这个怎么样?

public bool IsAnyReviewState() 
{ 
    return new [] {"accept", "refer"}.Contains((Status??string.empty).ToString().ToLower()) 
} 
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(); 
} 
1
  1. 对于简单的存取这样的,物业语法比方法更好。
  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; 
    } 
} 
1

我会用ternary operators像这样:

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

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

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

这将释放你写的防守null -checks并且不需要.ToLower()

更少的代码:=快乐编码

编辑:请问Status属性需要一个string?也许你可以将它替换为枚举?

0

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

如果您试图使其更易读,唯一想到的就是修改return声明。

例如,而不是

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

考虑

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

这很大程度上取决于您认为可读的内容。例如,我反对这一点,因为我必须在心理上检查返回真实是否在真实路径中,而在短符号形式中我没有额外的精神“负载”。 – 2013-03-11 06:35:05

+0

我提出建议的主要原因是因为对编码不熟悉的人可能更容易理解正在发生的事情。有人可能没有意识到'=='操作符会返回一个方法可以返回的布尔值,这似乎是合理的。 – 2013-03-11 19:12:40