为什么不支持Convert.ToDouble(char)?

时间:2012-04-25 08:07:06

标签: c#

从msdn页面:

  

public static double ToDouble( char value )

     

参数

     


  键入:System.Char   要转换的Unicode字符。

     

返回值
  键入:System.Double   不支持此转换。没有返回任何值。

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

4 个答案:

答案 0 :(得分:6)

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

这只是.NET设计试图让你摆脱困境。将char转换为整数类型是合理的,您可以查看Unicode映射表并计算代码点。但转换为布尔值意味着什么呢?什么Unicode代码点是真的? ToDateTime不需要解释。角色怎么可能是小数值?没有半个或四分之一的代码点。

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:2)

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

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

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

以下代码可能是一个更清晰的例子:

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

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

答案 3 :(得分:1)