IsNullOrEmpty参数中的Concat字符串

时间:2009-12-12 07:22:20

标签: c# string

我正在查看我在C#中编写的一段代码:

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

并决定使其更具可读性/简洁性

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

但看着它我忍不住畏缩。你对此有何看法?您是否曾经做过类似的事情,并在适用的时候使用它。

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

6 个答案:

答案 0 :(得分:5)

就我个人而言,我更喜欢前者而非后者。对我来说,意图更明确 - 检查所有参数是否为空/空。

第二个也隐藏了它确实处理空值的事实。空字符串是奇数。例如,杰森·威廉姆斯(Jason Williams)上面并没有说明它确实有效。

答案 1 :(得分:4)

也许写下这样的东西,它更具可读性:

bool paramsAreInvalid =
   string.IsNullOrEmpty(param1)
   && string.IsNullOrEmpty(param2)
   && string.IsNullOrEmpty(param3);

if (paramsAreInvalid)
{
       // do stuff
}

答案 2 :(得分:3)

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

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') {
    // ...
}

答案 3 :(得分:2)

那不行。如果任何字符串为null,您将获得null解除引用异常。您需要在使用它们之前检查它们。

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

更好的方法是编写一个接受变量参数或字符串列表的方法,并在循环中使用IsNullOrEmpty逐个检查它们。这将更有效,更安全,但仍能在if语句中实现整洁代码的预期效果。

答案 4 :(得分:1)

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

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

该示例使用this string extensionmyParamsstring[]

答案 5 :(得分:0)

原始代码虽然更长,但其意图更清晰,而且可能性能类似。我不管它。