C# Stringcomparison OrigenOreCase的真假值

C# Stringcomparison OrigenOreCase的真假值,c#,string-comparison,ordinal,C#,String Comparison,Ordinal,这有意义吗?MyValue可以是“true”或“false” 它不应该是Stringcomparison.OrdinalIgnoreCase吗 MyValue.Equals("true", StringComparison.CurrentCultureIgnoreCase)) 我不会那样做。仅仅因为字符串不等于“true”,并不意味着它等于“false”。这是一种让丑陋的虫子溜进来的简单方法。我认为你应该分析这个字符串 bool value; if(!Boolean.TryParse(MyVa

这有意义吗?MyValue可以是“true”或“false”

它不应该是Stringcomparison.OrdinalIgnoreCase吗

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

我不会那样做。仅仅因为字符串不等于
“true”
,并不意味着它等于
“false”
。这是一种让丑陋的虫子溜进来的简单方法。我认为你应该分析这个字符串

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

这更有可能是正确的,而且更具可读性。另外,文化问题刚刚被掩盖起来。

这实际上取决于你的情况以及你的程序的其他部分是如何编制的。从文件开始

OrdinalIgnoreCase属性返回的StringComparer将要比较的字符串中的字符视为使用不变区域性的约定将其转换为大写,然后执行独立于语言的简单字节比较。这在比较以编程方式生成的字符串或比较不区分大小写的资源(如路径和文件名)时最合适


因此,基本上,如果值是独立于区域性的(以编程方式生成等),请使用
ordinallingorecase

MyValue.ToLower().Equals(“true”)
@AmenAyach:这是不正确的
ToLower
依赖于区域性,因此不应用于不依赖于区域性的比较。像这样的事情可能会在本地化应用程序中引入难以发现的bug。嗯,
TryParse
。不要让令人烦恼的异常发生。一般来说是的,但是,如上所述,该值只能是“真”或“假”,因此其他WSIE将是异常的。我不想压制这一点。如果OP有办法处理它,那么他们应该使用
TryParse
Right,因此应该检查
TryParse
中的返回值并进行相应的处理。
bool value;
if(!Boolean.TryParse(MyValue, out value)) {
    // it did not parse
}
// it parsed