30

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

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

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

4

2 回答 2

16

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

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

接受的值...是'1', 'yes', 'true', and 'on',它们会导致该方法返回True,以及'0', 'no', 'false', and 'off',会导致它返回False

parse_init_file另一方面,在 PHP中:

字符串值"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 作为一种格式,要么完全避免使用某些解析器理解的任何魔术布尔值,而是坚持使用1and 0
于 2018-01-13T12:17:19.430 回答
5

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

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

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

是/否和开/关我将不得不使用 if/switch 语句。可读。更多代码。

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

于 2012-09-17T23:26:12.713 回答