我想写个方法,传入类就可以从xml中得到相应的值,xml读取那块我写两个工具类,负责读取。
private T SetFiledsValue<T>(XmlMachine xmlMachine) where T : new()
{
T result = new T();
Type type = typeof(T);
FieldInfo[] fields = type.GetFields();
foreach (FieldInfo field in fields)
{
if (field.GetType() == typeof(string))
{
field.SetValue(result, xmlMachine.Read(field.Name));
}
else if (field.GetType() == typeof(List<string>))
{
field.SetValue(result, xmlMachine.Reads(field.Name));
}
else
{
//这里我希望递归调用SetFiledsValue<T>(XmlMachine xmlMachine) 这个方法,关键这个<T> 的T怎么传呀,忘大神们指教
}
}
return result;
}
有两种方法可以处理:
1. 穷尽你可的类型;
2. 要不然从网上找一个“非泛型调用泛型方法”的例子,包装一下调用。
或者你干脆将方法 private T SetFiledsValue<T>(XmlMachine xmlMachine) where T : new()
转换为 private object SetFiledsValue(Type resultType, XmlMachine xmlMachine);
然后实例化对象的时候用 CreateInstance方法。
我觉得想用几行代码做成一个通用的方法估计会很难。
然后提两点建议:
1. SetFiledsValue似乎改成SetFieldsValue更合规;
2. 如果需要多次调用 SetFiledsValue,建议 type.GetFields() 缓存一下。