我在表中有一个 char 类型的列。我想将它转换为 C# 中的字符。它正在工作
char gender = Convert.ToChar(dataRow["Gender"]);
但它失败了
char gender = (char)(dataRow["Gender"]);
如果列是 int 类型。我可以使用 (int) 来投射一个对象。为什么它在char(异常)上失败?
InValidCastException。
谢谢,
我在表中有一个 char 类型的列。我想将它转换为 C# 中的字符。它正在工作
char gender = Convert.ToChar(dataRow["Gender"]);
但它失败了
char gender = (char)(dataRow["Gender"]);
如果列是 int 类型。我可以使用 (int) 来投射一个对象。为什么它在char(异常)上失败?
InValidCastException。
谢谢,
这是“对象”datarow[column]
类型的表达式
该Convert.ToChar()
方法有一个将对象作为参数的重载,因此编译器知道该做什么。
(char)dataRow[column]
是对 char 类型的显式转换dataRow[column]
,但不存在从 object 到 char 的自动转换
Convert.ToChar
读取文本值“A”并将其转换为值为“A”的字符对象。
强制转换假定原始值是一个字符对象。错误告诉你它不是。
显然dataRow["Gender"])
包含一个int
值。这意味着它是一个“装箱”的 int(一个存储为对象的“int”)。您只能将其转换为“真实” int,不能直接将其转换为其他东西,例如char
.
但是,您可以使用两步方法:
char gender = (char)(int)dataRow["Gender"];
int
ro 铸造成真正的char
。如果dataRow["Gender"]
实际上是一个(强类型)字符串,您可以使用
char g = dataRow["Gender"][0];
获取该字符串的第零个字符(如果字符串为null
空或为空,则会失败)。另一方面,如果dataRow["Gender"]
是一个字符串但类型为System.Object
,则可以使用
char g = ((string)dataRow["Gender"])[0];
单元格中的实际值很可能是 type 。在这种情况下,您将获得.object
InvalidCastException
相反, Convert.ToChar起作用,因为存在接受object
类型的重载。