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

时间:2012-09-17 22:03:13

标签: app-config ini

我见过各种用于在INI文件中设置布尔值的方法:

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

哪种规范,常见和/或首选方式最适合?

2 个答案:

答案 0 :(得分:6)

没有针对INI文件的规范,但无论它的价值如何,我都会列出一些我认识的语言实现的行为。

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

  

接受的值...是'1''yes''true''on',这会导致此方法返回True和{{ 1}},'0''no''false',导致它返回'off'

另一方面,在PHP的parse_init_file中:

  

字符串值" true" " on" " yes" 转换为 TRUE " false" " off" " no" "无" 被视为 FALSE

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

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

我建议:

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

答案 1 :(得分:4)

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

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

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

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

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