C# 如何简化这个C代码
有没有更好的方法在vs2010 C中编写这个 也许是C#4的一种简化方式,我还在学习C# 如何简化这个C代码,c#,visual-studio-2010,C#,Visual Studio 2010,有没有更好的方法在vs2010 C中编写这个 也许是C#4的一种简化方式,我还在学习 public bool IsAccept() { return (Status == null)?false:(Status.ToLower() == "accept"); } 等等 等等……这个怎么样 public bool IsAnyReviewState() { return new [] {"accept", "refer"}.Contains((Status
public bool IsAccept()
{
return (Status == null)?false:(Status.ToLower() == "accept");
}
等等
等等……这个怎么样
public bool IsAnyReviewState()
{
return new [] {"accept", "refer"}.Contains((Status??string.empty).ToString().ToLower())
}
这个怎么样
public bool IsAnyReviewState()
{
return new [] {"accept", "refer"}.Contains((Status??string.empty).ToString().ToLower())
}
您可以使用短路求值使代码更加精确。顺便说一句,这方面没有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();
}
您可以使用短路求值使代码更加精确。顺便说一句,这方面没有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();
}
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;
}
}
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;
}
}
我想这样说:
我想这样说:
就个人而言,我更喜欢使用
string.Equals
进行字符串比较。如果是IsAccept()
,我会写:
public bool IsAccept()
{
return string.Equals(Status, "accept", StringComparison.InvariantCultureIgnoreCase);
}
这使您无需编写防御性的null
-检查,并且不需要.ToLower()
更少的代码:=快乐的编码者
编辑:是否需要将
状态
属性设置为字符串
?您可以将其替换为枚举吗?就个人而言,我更喜欢使用string.Equals
进行字符串比较。如果是IsAccept()
,我会写:
public bool IsAccept()
{
return string.Equals(Status, "accept", StringComparison.InvariantCultureIgnoreCase);
}
这使您无需编写防御性的null
-检查,并且不需要.ToLower()
更少的代码:=快乐的编码者
编辑:是否需要将
状态
属性设置为字符串
?您可以将其替换为枚举吗?正如RvdK所说,这个问题应该是打开的。此外,我不确定您是否在尝试使代码更紧凑或更可读
如果您想让它更具可读性,唯一想到的就是修改return
语句
例如,代替
return Status.ToLower() == "accept";
考虑
if(Status.ToLower() == "accept")
return true;
else
return false;
正如RvdK所说,这个问题应该继续讨论。此外,我不确定您是否在尝试使代码更紧凑或更可读 如果您想让它更具可读性,唯一想到的就是修改
return
语句
例如,代替
return Status.ToLower() == "accept";
考虑
if(Status.ToLower() == "accept")
return true;
else
return false;
这是不是可以迁移到CoDeEvIEW.STACKExchange?COM而不是CONTROL?属于它是否可以迁移到CoDeEvIEW.STACKExchange?COM而不是关闭?这很大程度上取决于您认为可读的东西。例如,我反对这一点,因为我必须在心里检查返回true是否在true路径中,而在简短的符号形式中,我没有额外的精神“负荷”。我提出我的建议的主要原因是,不熟悉编码的人可能会发现更容易理解正在发生的事情。有人可能不知道,<代码>=< /代码>运算符将返回一个布尔值,该值可以由方法返回。这很大程度上取决于您认为可读的内容。例如,我反对这一点,因为我必须在心里检查返回true是否在true路径中,而在简短的符号形式中,我没有额外的精神“负荷”。我提出我的建议的主要原因是,不熟悉编码的人可能会发现更容易理解正在发生的事情。有人可能没有意识到
=
操作符将返回一个布尔值,该值可以由方法返回,这是有道理的。