【发布时间】:2010-11-20 12:27:36
【问题描述】:
看到我有这样的情况......
object myRoledata = List<Roles>() --> (some list or Ienumerable type)
现在我有一个通用方法,它从List<T> 创建一个 XML 对象 -
像这样的..
public string GetXML<T>(object listdata)
{
List<T> objLists = (List<T>)Convert.ChangeType(listData, typeof(List<T>));
foreach(var obj in listdata)
{
//logic to create xml
}
}
现在为了运行这个方法,我必须这样做:
string xml = GetXML<Roles>(myRoledata);
现在我不知道Type 可能会来找我传递给GetXML 方法。我有一个方法可以为不同的Types 调用GetXML,例如Roles、Users 等
现在我可以像这样在List<> 中获取Type
Type genericType = obj.GetType().GetGenericArguments()[0];
但不能这样通过
string xml = GetXML<genericType>(myRoledata);
无论如何我可以将任何genericTypes 传递给GetXML 方法吗?
【问题讨论】:
-
您可能想在编译时(可能有多种)类型 T 是否未知的问题中说明清楚。如果它们是已知的,那么 Ulrik 的答案是有道理的,即停止强制转换并强制参数类型(可能有几个重载)。如果不知道,您必须以某种形式使用反射,而 Marks 的答案显示了实现这一目标的最简单且可能最好的方法。