如何简化这个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#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();
}
- 对于像这样的简单访问器,Property语法比方法更好
- 将
String.Equals
或String.IndexOf
与StringComparison.OrdinalIgnoreCase
一起使用,而不是使用String.ToLower() ==
。此外,如果您绝对必须规范化字符串,则使用String.ToUpperInvariant
,因为它保留了在执行ToLowerInvariant
时丢失的某些信息,这会影响非拉丁语言,如土耳其语,它具有类似I的特殊行为 - 考虑使用
String.IsNullOrEmpty
- 请记住,布尔运算符本身返回布尔值,因此可以大规模简化
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())
}
如果你想让它更可读,那么你唯一想到的就是修改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()
。
更少的代码:=快乐的编码器
edit:Status
属性是否需要是string
?你可以用枚举代替它吗?