所以it appears Convert.ToBoolean(string, IFormatProvider)
完全忽略了给定的IFormatProvider
。
ReferenceSource似乎同意:
public static bool ToBoolean(String value, IFormatProvider provider) {
if (value == null)
return false;
Boolean.Parse(value);
}
但是,尽管如此, documentation会宣传人们期望的行为。 不,这不是真的:正如@tyranid指出的那样,我会失明。
进一步挖掘,存在Convert.ToBoolean(object, IFormatProvider)
重载,它在给定值上调用IConvertible.ToBoolean(IFormatProvider)
。宾果,对吧?只需加上价值,你就变得金黄了。
可悲的是,System.String
该方法的实施如下:
bool IConvertible.ToBoolean(IFormatProvider provider) {
return Convert.ToBoolean(this, provider);
}
所以我们回到我们开始的地方。
这似乎是一个框架中的巨大疏忽,否则通常是连贯的。
也许这是一个人们想象的难题?
更重要的是:你们中的任何人都知道一种解决方法吗?是否应该用巨大的switch
来处理所有不同的可能和虚假的价值?
奇怪的是,要么我的谷歌生锈了,要么这个问题没有多少争论。