我已经看到了用于在INI文件中设置布尔值的各种方法:
variable = true
variable = 1
variable = on
variable = yes
哪种方式最规范、最常见和/或最受欢迎?
INI 文件没有规范,但无论它的价值如何,我将列出我所知道的语言的一些实现的行为。
Python 的内置configparser
模块提供了一个行为如下getboolean
:
接受的值...是
'1'
、'yes'
、'true'
和'on'
,导致此方法返回True
,以及'0'
、'no'
、'false'
和'off'
,导致它返回False
。
另一方面,在PHP的parse_init_file
中:
字符串值">true"、">on"和"yes">将转换为TRUE。"假"、">关闭"、">否"和"无">被视为假。
同时,.NET 没有对 INI 解析的内置支持,但其最流行的 INI 解析库 ini-parser 不支持自动解析值,并将它们全部作为字符串返回。它的入门示例显示了使用 .NET 的Boolean.Parse
,它将接受字符串"true"
和"false"
(任何大写),并在给定任何其他内容时抛出异常。
总之:INI解析器的不同实现在这个问题上绝对没有一致性。
我建议:
- 如果您只打算使用单个解析器解析您的 INI,请检查该解析器的行为方式并精心制作您的 INI 以适应其特定实现。
- 如果您需要支持广泛的解析器(例如,语言互操作性),那么要么完全放弃 INI 作为一种格式,要么完全避免使用某些解析器理解的任何魔术布尔值,而是坚持
1
和0
。
这取决于 ini 文件的解析器。 这些值始终是字符串。
true/false:在 C# 中,我可以将真和假字符串直接转换为布尔值。等于可读性和易于转换。更少的代码。
0/1 :在转换为布尔值之前,我必须将字符串 0 和 1 转换为 int。较小的 ini 文件大小。可读性较差。更多代码。
是/否和开/关我将不得不使用 if/switch 语句。 可读。 更多代码。
我的首选方式是真/假。对象序列化为 true/false,您可以将 true/false 与 sql 位类型一起使用,即使它存储为 0/1。因此,唯一的缺点是在大多数情况下可能很小的大小。