在C ++中假设为false,而所有其他值都为true。我的印象是在C#中这个概念是一样的。
我试图将char转换为bool。
char c = (char)0;
Convert.ToBoolean(c).Dump();
似乎无论我尝试转换什么字符,我总是会收到错误
来自' Char'的无效演员表到'布尔
如果我编写自己的自定义函数,我明白我可以解决这个问题,但我想要了解的是。
此方法的目的是什么,Char值转换为Bool?
答案 0 :(得分:2)
你说:
我的印象是在C#中这个概念是一样的。
你错了。它不是。这两种语言的行为方式不同,您无法将Char
转换为Boolean
。
文档清楚地表明该方法总是失败:
调用此方法始终会抛出
InvalidCastException
。
和...
返回值
输入:
System.Boolean
不支持此转换。没有返回任何值。
正如Char.ToBoolean()
的来源所证明的那样:
[__DynamicallyInvokable]
bool IConvertible.ToBoolean(IFormatProvider provider)
{
object[] values = new object[] { "Char", "Boolean" };
throw new InvalidCastException(Environment.GetResourceString("InvalidCast_FromTo", values));
}
由于Char
类继承自IConvertible
,因此需要提供重载。但由于无法进行此转换,因此始终会返回异常。
答案 1 :(得分:1)
只是为了说明如何使用 unsafe 关键字(类似于c ++)。不要用这个..
char c = (char)0;
unsafe{
bool b = *((bool *)&c);
}
答案 2 :(得分:1)
这种方法的目的是什么......?
此方法保留供将来使用。
也许他们正在考虑按照C ++的方式实施它,但最终决定不这样做。
编辑 - ICOvertible 不原因
char.ToBoolean()
方法似乎有些混乱。
((IConvertible)someChar).ToBoolean(...);
是与Convert.ToBoolean
不同的问题。 (为什么首先进行显式转换 - 请参阅here。)在char
IConvertible
生成{<1}}时,前有。后者可能根本就没有被创建,所以为什么这个方法(Convert.ToBoolean
)存在的问题似乎只是为了向后兼容+原始意图。
(如果我误解了这一点 - 当然请告诉我。)