【问题标题】:How to set boolean values in an INI configuration file?如何在 INI 配置文件中设置布尔值?
【发布时间】:2012-09-10 04:03:56
【问题描述】:

我见过多种在 INI 文件中设置布尔值的方法:

  • variable = true
  • variable = 1
  • variable = on
  • variable = yes

哪种方式是最规范、最常见和/或首选的方式?

【问题讨论】:

    标签: app-config ini


    【解决方案1】:

    没有 INI 文件的规范,但不管它值多少钱,我都会列出一些我所知道的语言的实现的行为。

    Python 的内置 configparser 模块提供了一个 getboolean,其行为如下:

    接受的值...是'1''yes''true''on',这导致此方法返回True'0''no''false',和'off',这会导致它返回False

    另一方面,在 PHP 的 parse_init_file 中:

    字符串值 "true""on""yes" 被转换为 TRUE"false""off""no""none" 被视为 FALSE。

    同时,.NET 没有对 INI 解析的内置支持,但其最流行的 INI 解析库 ini-parser 不支持自动解析值并将它们全部作为字符串返回。它的 Getting Started 示例显示了使用 .NET 的 Boolean.Parse 解析布尔值,它将接受字符串 "true""false"(任何大小写),并在给出其他任何内容时抛出异常。

    总而言之:INI 解析器的不同实现在这个问题上绝对没有一致性。

    我会推荐:

    • 如果您只打算使用单个解析器解析您的 INI,请检查该解析器的行为方式并设计您的 INI 以适应其特定实现。
    • 如果您需要支持范围广泛的解析器(例如,语言互操作性),那么要么完全放弃 INI 作为一种格式,要么完全避免使用某些解析器理解的任何魔法布尔值,而是坚持使用10

    【讨论】:

    • 具有讽刺意味的是,我刚刚发现 Delphi 的实现期望 1/0 - 我有点惊讶 true/True/false/False 不起作用。 yes/no 也没有。似乎有问题,如果您希望用不同语言编写的应用程序共享相同的 INI 文件...
    【解决方案2】:

    这取决于 ini 文件的解析器。 值始终是字符串。

    true/false :在 C# 中,我可以将 true 和 false 字符串直接转换为 bool。等于可读性和易于转换。更少的代码。

    0/1 :在转换为 bool 之前,我必须将字符串 0 和 1 转换为 int。较小的 ini 文件大小。可读性较差。更多代码。

    yes/no 和 on/off 我必须使用 if/switch 语句。可读。更多代码。

    我的首选方式是 true/false。 对象序列化为 true/false,您可以将 true/false 与 sql 位类型一起使用,即使它存储为 0/1。所以唯一的缺点是尺寸在大多数情况下可能很小。

    【讨论】:

      猜你喜欢
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2021-06-07
      相关资源
      最近更新 更多