【问题标题】:Stringcomparison OrdinalIgnoreCase for true false values真假值的字符串比较 OrdinalIgnoreCase
【发布时间】:2012-04-14 03:56:18
【问题描述】:

这有意义吗? MyValue 可以是“真”或“假”

不应该是Stringcomparison.OrdinalIgnoreCase吗?

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

【问题讨论】:

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

标签: c# string-comparison ordinal


【解决方案1】:

这实际上取决于您的情况以及程序的其余部分是如何制作的。来自OrdinalCompareCase 上的文档

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

所以基本上,如果值与文化无关(以程序方式生成等),请使用 OrdinalIgnoreCase

【讨论】:

    【解决方案2】:

    我不会那样做。仅仅因为字符串不等于"true" 并不意味着它等于"false"。这是让丑陋的错误溜进来的一种简单方法。我认为您应该解析字符串

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

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

    【讨论】:

      【解决方案3】:
      Bool.Parse
      

      looks better to me.

      【讨论】:

      • 好吧,TryParse。不要让令人烦恼的异常发生。
      • 一般情况下是的,但如前所述,该值只能为“true”或“false”,因此其他情况除外。我不想压抑它。如果 OP 有办法处理它,他们应该使用 TryParse
      • 对,所以改为检查TryParse的返回值并进行相应处理。
      猜你喜欢
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 2016-04-27
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多