如何在INI配置文件中设置布尔值?

Ani*_*van 21 ini app-config

我已经看到了用于在INI文件中设置布尔值的各种方法:

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

哪种是规范,常见和/或首选方式?

Mar*_*ery 11

INI文件没有规范,但无论它值多少,我都会列出一些我知道的语言实现的行为.

Python的内置configparser模块提供getboolean如下行为:

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

parse_init_file另一方面,在PHP中:

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

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

总结:在INI解析器的不同实现之间,这个问题绝对没有一致性.

我建议:

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


Val*_*mas 5

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

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

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

是/否和开/关我必须使用if / switch语句。可读的。更多代码。

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