3

我在表中有一个 char 类型的列。我想将它转换为 C# 中的字符。它正在工作

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

但它失败了

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

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

InValidCastException。

谢谢,

4

5 回答 5

3

这是“对象”datarow[column]类型的表达式

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

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

于 2012-06-18T14:56:56.377 回答
1

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

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

于 2012-06-18T14:50:55.570 回答
1

显然dataRow["Gender"])包含一个int值。这意味着它是一个“装箱”的 int(一个存储为对象的“int”)。您只能将其转换为“真实” int,不能直接将其转换为其他东西,例如char.

但是,您可以使用两步方法:

char gender = (char)(int)dataRow["Gender"];
  • 首先将盒装intro 铸造成真正的
  • 然后将该 int 转换为 a char
于 2012-06-18T15:31:28.123 回答
0

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

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

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

char g = ((string)dataRow["Gender"])[0];
于 2012-06-18T15:03:55.693 回答
0

单元格中的实际可能是 type 。在这种情况下,您获得.objectInvalidCastException

相反, Convert.ToChar起作用,因为存在接受object类型的重载。

于 2012-06-18T14:55:22.393 回答