从 msdn 页面:
public static double ToDouble( char value )
参数
value
类型:System.Char 要转换的 Unicode 字符。返回值
类型:System.Double 不支持此转换。不返回任何值。
如果不支持,为什么要首先实施?
从 msdn 页面:
public static double ToDouble( char value )
参数
value
类型:System.Char 要转换的 Unicode 字符。返回值
类型:System.Double 不支持此转换。不返回任何值。
如果不支持,为什么要首先实施?
它不是唯一的。也不支持 Convert.ToBoolean(char)、ToDateTime、ToDecimal 和 ToSingle,它们都像 ToDouble 一样抛出 InvalidCastException。
这只是 .NET 设计,试图让您远离麻烦。将 char 转换为整数类型是合理的,您可以查看 Unicode 映射表并计算代码点。但是转换为布尔值意味着什么?什么 Unicode 代码点是 True?ToDateTime 不需要解释。一个字符怎么可能是一个小数值?没有一半或四分之一的代码点。
您可以使其工作,先转换为 Int32,然后再转换为 Double。但无论如何,请检查您的代码并确保这是一件有意义的事情。.NET 设计者认为不是。他们是对的。
根据 MSDN,此功能保留供将来在 .Net 2.0 中使用,并保留到 4.5 以支持以前版本的 .net 框架。
如果未来的操作系统支持这种类型的转换,他们将实现这一点。目前,操作系统将 char 存储为 int,因此由于大量内部转换,因此不提供将 char 转换为 double 的方法。
由于内部存储格式,Convert.ToDouble(DateTime) 也有同样的限制。
每个字符都有一个对应的整数。例如:
Convert.ToInt16('a') -> returns 97.
我猜 Convert 不支持从 char 转换为其他类型的主要原因是字符的第二天性是整数类型。
也许更清楚的例子是下面的代码:
char a = 'a';
int aVal = (int)a;
实际上 Convert.ToInt32 确实(但也会引发溢出异常)