Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何简化这个C代码_C#_Visual Studio 2010 - Fatal编程技术网

C# 如何简化这个C代码

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

有没有更好的方法在vs2010 C中编写这个

也许是C#4的一种简化方式,我还在学习

   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路径中,而在简短的符号形式中,我没有额外的精神“负荷”。我提出我的建议的主要原因是,不熟悉编码的人可能会发现更容易理解正在发生的事情。有人可能没有意识到
    =
    操作符将返回一个布尔值,该值可以由方法返回,这是有道理的。