代码之家  ›  专栏  ›  技术社区  ›  Omar

isNullOrEmpty参数中的Concat字符串

  •  4
  • Omar  · 技术社区  · 15 年前

    我在看用C编写的一段代码:

    if(string.IsNullOrEmpty(param1) && string.IsNullOrEmpty(param2) && string.IsNullOrEmpty(param3))
    {
           // do stuff
    }
    

    并决定让它更易读/简洁

    if(string.IsNullOrEmpty(param1+param2+param3))
    {
           // do stuff
    }
    

    但看着它,我禁不住畏缩不前。你对此有何看法?你有没有做过这样的事情,并且在适用的时候使用过。

    注意:该行前面的代码将通过添加特定项来操作集合,具体取决于a参数(param1、param2、param3)是否为空。此if语句用于验证/错误处理。

    6 回复  |  直到 15 年前
        1
  •  5
  •   ICR    15 年前

    我个人更喜欢前者而不是后者。对我来说,目的更明确——检查所有参数是否为空。

    第二个还隐藏了处理空值的事实。空字符串是奇数。例如,上面的Jason Williams并不认为它确实有效。

        2
  •  4
  •   Chris Fulstow    15 年前

    也许可以这样写,这样更易读:

    bool paramsAreInvalid =
       string.IsNullOrEmpty(param1)
       && string.IsNullOrEmpty(param2)
       && string.IsNullOrEmpty(param3);
    
    if (paramsAreInvalid)
    {
           // do stuff
    }
    
        3
  •  3
  •   Michael Burr    15 年前

    这是一件很小的事情,但我认为对原始代码进行细微的重新格式化会提高可读性,并使代码的意图尽可能清晰:

    if ( string.IsNullOrEmpty(param1) && 
         string.IsNullOrEmpty(param2) && 
         string.IsNullOrEmpty(param3) )
    {
           // do stuff
    }
    

    考虑这组类似的例子:

    if ( c == 's' || c == 'o' || c == 'm' || c == 'e' || c == 't' || c == 'h' || c == 'i' || c == 'n' || c == 'g') {
        // ...
    }
    
    if ( c == 's' || 
         c == 'o' || 
         c == 'm' || 
         c == 'e' || 
         c == 't' || 
         c == 'h' || 
         c == 'i' || 
         c == 'n' || 
         c == 'g') {
        // ...
    }
    
        4
  •  2
  •   Jason Williams    15 年前

    那不行。如果任何一个字符串为空,您将得到一个空的取消引用异常。你需要在使用前检查它们。

    另外,它效率很低。您将所有字符串连接到一个新字符串中,然后测试它是否为非空。这会导致一个或多个内存分配,并且可能会复制大量数据,但稍后会立即丢弃并收集垃圾。

    一种更好的方法是编写一个方法,该方法接受变量参数或字符串列表,并在循环中使用isNullOrEmpty逐个检查它们。这将更有效、更安全,但仍然可以在if语句中实现整洁代码的理想结果。

        5
  •  1
  •   Community CDub    8 年前

    如果可以获取集合中的参数(如果它是函数,则可以使用 params 关键字)那么这可能有效:

    if (myParams.Any(IsNullOrTrimEmpty)
        {
            // do stuff
        }
    

    示例使用 this string extension myParams 是一个 string[] .

        6
  •  0
  •   Michael Petrotta user3140870    15 年前

    原始代码虽然更长,但在其意图上更清晰,在性能方面也可能相似。我会让它一个人呆着。