char cast vs Convert.ToChar()

时间:2012-06-18 14:48:27

标签: c# sql-server char

我在表格中有一个char类型列。我想将它转换为C#中的char。 它正在通过

工作
char gender = Convert.ToChar(dataRow["Gender"]);

但它失败了

 char gender = (char)(dataRow["Gender"]);

如果列是int类型。我可以使用(int)来转换对象。 为什么它在char(异常)上失败?

InvalidCastException的。

谢谢,

5 个答案:

答案 0 :(得分:3)

datarow[column]'object'

类型的表达式

Convert.ToChar()方法有一个以对象作为参数的重载,因此编译器知道该怎么做。

(char)dataRow[column]dataRow[column]对char类型的显式转换,但是从对象到char的自动转换不存在

答案 1 :(得分:1)

Convert.ToChar读取文本值“A”并将其转换为值为“A”的字符对象。

Casting假定原始值是一个字符对象。错误告诉你它不是。

答案 2 :(得分:1)

显然dataRow["Gender"])包含int值。这意味着它是一个“盒装”int(一个'int'存储为一个对象)。你只能把它转换为“真正的”int,你不能直接把它转换成其他东西,比如char

然而,您可以使用两步法:

char gender = (char)(int)dataRow["Gender"];
  • 首先将盒装的int转换成真正的
  • 然后将该int转换为char

答案 3 :(得分:0)

大多数概率单元格中的真实值类型为object。 在案例中,您获得InvalidCastException

相反,

Convert.ToChar会导致存在接受object类型的重载。

答案 4 :(得分:0)

如果dataRow["Gender"]实际上是(强类型)字符串,则可以使用

char g = dataRow["Gender"][0];

获取该字符串的第0个字符(如果字符串为null或为空,则会失败)。另一方面,如果dataRow["Gender"]是字符串但输入为System.Object,则可以使用

char g = ((string)dataRow["Gender"])[0];