为了账号安全,请及时绑定邮箱和手机立即绑定

泛型方法如何递归

泛型方法如何递归

杨魅力 2018-08-20 09:06:35
我想写个方法,传入类就可以从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 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

有两种方法可以处理:

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() 缓存一下。


查看完整回答
反对 回复 2018-08-22
  • 1 回答
  • 0 关注
  • 479 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信