20

从 msdn 页面:

public static double ToDouble( char value )

参数

value
类型:System.Char 要转换的 Unicode 字符。

返回值
类型:System.Double 不支持此转换。不返回任何值。

如果不支持,为什么要首先实施?

4

4 回答 4

5

它不是唯一的。也不支持 Convert.ToBoolean(char)、ToDateTime、ToDecimal 和 ToSingle,它们都像 ToDouble 一样抛出 InvalidCastException。

这只是 .NET 设计,试图让您远离麻烦。将 char 转换为整数类型是合理的,您可以查看 Unicode 映射表并计算代码点。但是转换为布尔值意味着什么?什么 Unicode 代码点是 True?ToDateTime 不需要解释。一个字符怎么可能是一个数值?没有一半或四分之一的代码点。

可以使其工作,先转换为 Int32,然后再转换为 Double。但无论如何,请检查您的代码并确保这是一件有意义的事情。.NET 设计者认为不是。他们是对的。

于 2012-04-25T09:43:05.770 回答
3

根据 MSDN,此功能保留供将来在 .Net 2.0 中使用,并保留到 4.5 以支持以前版本的 .net 框架。

如果未来的操作系统支持这种类型的转换,他们将实现这一点。目前,操作系统将 char 存储为 int,因此由于大量内部转换,因此不提供将 char 转换为 double 的方法。

由于内部存储格式,Convert.ToDouble(DateTime) 也有同样的限制。

于 2012-04-25T09:09:40.907 回答
2

每个字符都有一个对应的整数。例如:

Convert.ToInt16('a') -> returns 97.

我猜 Convert 不支持从 char 转换为其他类型的主要原因是字符的第二天性是整数类型。

也许更清楚的例子是下面的代码:

char a = 'a';
int aVal = (int)a;

实际上 Convert.ToInt32 确实(但也会引发溢出异常)

于 2012-04-25T08:16:23.150 回答