泛型方法如何递归

我想写个方法,传入类就可以从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;
       }


杨魅力
浏览 480回答 1
1回答

慕后森

有两种方法可以处理:1. 穷尽你可的类型;2. 要不然从网上找一个“非泛型调用泛型方法”的例子,包装一下调用。或者你干脆将方法&nbsp;private&nbsp;T SetFiledsValue<T>(XmlMachine xmlMachine)&nbsp;&nbsp;where&nbsp;T :&nbsp;new()转换为 private object SetFiledsValue(Type resultType, XmlMachine xmlMachine);然后实例化对象的时候用 CreateInstance方法。我觉得想用几行代码做成一个通用的方法估计会很难。然后提两点建议:1. SetFiledsValue似乎改成SetFieldsValue更合规;2.&nbsp;如果需要多次调用 SetFiledsValue,建议&nbsp;type.GetFields() 缓存一下。
打开App,查看更多内容
随时随地看视频慕课网APP