帮助处理字符串的C#条件语句

时间:2009-11-25 02:25:19

标签: c# string conditional

在我试图剖析一点C#时,我恐怕不理解这段代码的目标或逻辑:

if (!string.IsNullOrEmpty(str2) && (Strings.UCase(Strings.Left(str2, 1)) != Strings.Left(str2, 1)))
    {
        return false;
    }

我理解第一部分是检查str2是否为“非空”,但是第二部分有点不稳定。所以我们将str2的第一个字符用于UCase,如果它不等于str2的第一个字符(不是“UCase”d),那么返回“false”?

也许我缺少任何东西,我上面描述的实际上是代码正在做什么。如果是这种情况,我们可以将其改为提供相同结果的其他内容,例如,检查str2是否为大写?我觉得这是最终目标。

你的想法?

5 个答案:

答案 0 :(得分:5)

是的,您理解正确的代码。

它看起来像是使用翻译工具从VB翻译的东西,因为它使用的是VisualBasic命名空间中的函数。我宁愿用String方法写它:

if (!String.IsNullOrEmpty(str2) && str2.Substring(0,1).ToUpper() != str2.SubString(0,1)) {
  return false;
}

或者只是将第一个字符作为字符而不是字符串,并使用IsLower类的Char方法:

if (!string.IsNullOrEmpty(str2) && Char.IsLower(str2[0])) {
  return false;
}

答案 1 :(得分:4)

我敢打赌,他们真的只是测试第一个字符是否为大写。最初的“IsNullOrEmpty”测试就是为了确保 real 测试不会抛出异常。

最大的问题:如果没有字符串值(null或空),则不会返回false。这是预期的结果吗?

答案 2 :(得分:3)

英文代码目标:)

如果非空字符串以小写字符开头,则返回false

答案 3 :(得分:0)

这是相同的,但重构:

if (!string.IsNullOrEmpty(str2)) {
  string s = Strings.Left(str2, 1);
  if (Strings.UCase(s) != s) {
    return false;
  }
}

很明显,这段代码测试str2的第一个字母在有任何字符时是否为大写。

答案 4 :(得分:0)

当你说:“我不理解这段代码的目标或逻辑时,我分享你的看法”:)只返回“假”的测试是“狡猾的”:大概是“某事”正在等待要返回一个布尔值,如果此结果的计算结果为“true”,则不返回任何内容。

但是如果我必须编写这样的函数,我会使用替代OR逻辑:

return (! (String.IsNullOrEmpty(testString) || testString.ToUpper()[0] == testString[0]));