字符串比较中的OrdinalIgnoreCase对于true和false值

5

这是有意义的吗?MyValue 可以是 "true" 或者 "false"

应不应该是 Stringcomparison.OrdinalIgnoreCase ?

MyValue.Equals("true", StringComparison.CurrentCultureIgnoreCase))

MyValue.ToLower().Equals("true") - Amen Ayach
2
@AmenAyach:这不正确。ToLower 是与文化相关的,因此不应用于非与文化相关的比较。这样的事情可能会在本地化应用程序中引入难以发现的错误。 - Daniel Hilgarth
3个回答

4

我不会这样做。仅仅因为一个字符串不等于"true"并不意味着它等于"false"。这是让丑陋的错误悄然产生的简单方式。我认为你应该解析这个字符串。

bool value;
if(!Boolean.TryParse(MyValue, out value)) {
    // it did not parse
}
// it parsed

这样更有可能是正确的,而且更易读。此外,文化问题也被搁置了。

2
这取决于你的情况和程序的其他部分如何设计。从OrdinalCompareCase文档中可以看出,由OrdinalIgnoreCase属性返回的StringComparer将字符串中的字符视为使用不变文化的约定转换为大写字母,然后执行一个独立于语言的简单字节比较。这在比较程序生成的字符串或比较大小写不敏感的资源(如路径和文件名)时最合适。因此,如果值是与文化无关的(例如生成的程序等),请使用OrdinalIgnoreCase

2

1
好的,使用TryParse。不要让令人烦恼的异常发生。 - jason
1
一般来说是的,但是如上所述,该值只能为“true”或“false”,否则将会异常。我不想压制它。如果OP有处理它的方法,他们应该使用TryParse - Jodrell
1
好的,因此请检查TryParse的返回值并相应地处理。 - jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接