在我试图剖析一点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是否为大写?我觉得这是最终目标。
你的想法?
答案 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]));