将字符转换为布尔值

时间:2017-10-26 19:10:21

标签: c# casting

在C ++中假设为false,而所有其他值都为true。我的印象是在C#中这个概念是一样的。

我试图将char转换为bool。

char c = (char)0;
Convert.ToBoolean(c).Dump();

似乎无论我尝试转换什么字符,我总是会收到错误

  

来自' Char'的无效演员表到'布尔

如果我编写自己的自定义函数,我明白我可以解决这个问题,但我想要了解的是。

此方法的目的是什么,Char值转换为Bool?

3 个答案:

答案 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)

  

这种方法的目的是什么......?

来自.NET 2.0 documentation

  

此方法保留供将来使用。

也许他们正在考虑按照C ++的方式实施它,但最终决定不这样做。

编辑 - ICOvertible 原因

char.ToBoolean()方法似乎有些混乱。

((IConvertible)someChar).ToBoolean(...);

是与Convert.ToBoolean不同的问题。 (为什么首先进行显式转换 - 请参阅here。)在char IConvertible生成{<1}}时,前。后者可能根本就没有被创建,所以为什么这个方法(Convert.ToBoolean)存在的问题似乎只是为了向后兼容+原始意图。

(如果我误解了这一点 - 当然请告诉我。)