字符转换与 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()的主要内容,如果未能解决你的问题,请参考以下文章

将十六进制 unicode 字符转换为其可视化表示

C#中Toint16 Toint32 Toint64 有啥区别?

判断是否是中文英文字符串

wpf程序,binding后界面啥都不显示,下面附上相关代码

npoi 导出word中写入特殊字符

C# 字符串 ASCII 表示