c# - 将对象转换到 T

标签 c# generics casting

我正在使用 .NET 中的 XmlReader 类解析 XML 文件,我认为编写通用解析函数来通用地读取不同属性会很聪明。我想出了以下功能:

private static T ReadData<T>(XmlReader reader, string value)
{
    reader.MoveToAttribute(value);
    object readData = reader.ReadContentAsObject();
    return (T)readData;
}

我逐渐意识到,这并没有完全按照我的计划进行;它会抛出原始类型(例如 intdouble)的错误,因为转换不能从 string 转换为数字类型。有什么方法可以让我的函数以修改后的形式生效吗?

最佳答案

首先检查是否可以转换。

if (readData is T) {
    return (T)readData;
} 
try {
   return (T)Convert.ChangeType(readData, typeof(T));
} 
catch (InvalidCastException) {
   return default(T);
}

关于c# - 将对象转换到 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/899629/

相关文章:

c# - 如何在 C# 中返回空值而不是空值

java - 为什么 Foo<String> 被视为 Foo< 的子类型(扩展)?扩展对象>?

c# - 如何将列表中的所有项目绑定(bind)到DataGridView?

c# - 如何使用mysql时区设置系统时区?

python - 如何访问 typing.Generic 的类型参数?

kotlin - Kotlin/Java 中的简单转换

java - 在Java中将String转换为double

c# - 在 .NET 线程中捕获异常

c# - 按名字/姓氏组合搜索时遇到问题

java - Struts2 INPUT 结果 : how does it work? 如何处理转换/验证错误?