字符转换与 Convert.ToChar()
Posted
技术标签:
【中文标题】字符转换与 Convert.ToChar()【英文标题】:char cast vs Convert.ToChar() 【发布时间】:2012-06-20 13:38:29 【问题描述】:我在表中有一个 char 类型的列。我想将它转换为 C# 中的字符。 它的工作原理是
char gender = Convert.ToChar(dataRow["Gender"]);
但是失败了
char gender = (char)(dataRow["Gender"]);
如果列是 int 类型。我可以使用 (int) 来投射一个对象。 为什么它在 char(异常)上失败?
InValidCastException。
谢谢,
【问题讨论】:
以什么方式失败?如果它抛出异常,请说出异常是什么。如果编译失败,请说明编译错误是什么。如果只是无法获得正确的值,请举例说明。 dataRow的返回类型是什么? 从什么到什么的无效转换?当然它指定... 与***.com/questions/1085097/…类似的问题 【参考方案1】:datarow[column]
是 'object' 类型的表达式
Convert.ToChar()
方法有一个将对象作为参数的重载,因此编译器知道该做什么。
(char)dataRow[column]
是 dataRow[column]
到 char 类型的显式转换,但不存在从 object 到 char 的自动转换
【讨论】:
你的意思是 (char) 将一个 char 对象作为参数吗? 编译器不会抱怨。我认为您的意思是运行时。问题还来自于尝试将其拆箱为不同类型。见***.com/a/1085105/442078【参考方案2】:Convert.ToChar
读取文本值“A”并将其转换为值为“A”的字符对象。
铸造假定原始值是一个字符对象。错误告诉你它不是。
【讨论】:
【参考方案3】:显然dataRow["Gender"])
包含一个int
值。这意味着它是一个“装箱”的 int(一个存储为对象的“int”)。您只能将其转换为“真实”int,不能直接将其转换为其他内容,例如 char
。
但是,您可以使用两步方法:
char gender = (char)(int)dataRow["Gender"];
先把盒装的int
换成真人
然后将该 int 转换为 char
。
【讨论】:
【参考方案4】:大部分单元格中的真实值可能是object
类型。
在这种情况下,您将收到InvalidCastException
。
Convert.ToChar 工作,相反,因为有一个接受 object
类型的重载。
【讨论】:
【参考方案5】:如果dataRow["Gender"]
实际上是一个(强类型)字符串,您可以使用
char g = dataRow["Gender"][0];
获取该字符串的第零个字符(如果字符串为null
或为空,则会失败)。另一方面,如果dataRow["Gender"]
是一个字符串但输入为System.Object
,则可以使用
char g = ((string)dataRow["Gender"])[0];
【讨论】:
以上是关于字符转换与 Convert.ToChar()的主要内容,如果未能解决你的问题,请参考以下文章
C#中Toint16 Toint32 Toint64 有啥区别?