【发布时间】:2012-09-10 04:03:56
【问题描述】:
我见过多种在 INI 文件中设置布尔值的方法:
variable = truevariable = 1variable = onvariable = yes
哪种方式是最规范、最常见和/或首选的方式?
【问题讨论】:
标签: app-config ini
我见过多种在 INI 文件中设置布尔值的方法:
variable = truevariable = 1variable = onvariable = yes哪种方式是最规范、最常见和/或首选的方式?
【问题讨论】:
标签: app-config ini
没有 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 解析器的不同实现在这个问题上绝对没有一致性。
我会推荐:
1 和 0。【讨论】:
1/0 - 我有点惊讶 true/True/false/False 不起作用。 yes/no 也没有。似乎有问题,如果您希望用不同语言编写的应用程序共享相同的 INI 文件...
这取决于 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。所以唯一的缺点是尺寸在大多数情况下可能很小。
【讨论】: