如何在 INI 配置文件中设置布尔值?
Posted
技术标签:
【中文标题】如何在 INI 配置文件中设置布尔值?【英文标题】:How to set boolean values in an INI configuration file? 【发布时间】:2012-09-10 04:03:56 【问题描述】:我见过多种在 INI 文件中设置布尔值的方法:
variable = true
variable = 1
variable = on
variable = yes
哪种方式是最规范、最常见和/或首选的方式?
【问题讨论】:
【参考方案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 作为一种格式,要么完全避免使用某些解析器理解的任何魔法布尔值,而是坚持使用1
和 0
。
【讨论】:
具有讽刺意味的是,我刚刚发现 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。所以唯一的缺点是尺寸在大多数情况下可能很小。
【讨论】:
以上是关于如何在 INI 配置文件中设置布尔值?的主要内容,如果未能解决你的问题,请参考以下文章