就DRY原则而言,我正在寻求减少以下方法(还有其他列表需要生成,所以现实生活中数量更大):
public static List<Genre> GetGenres(ApiCredentials apiCredentials = null, ApiServerParameters apiServerParameters = null)
{
List<Genre> returns = new List<Genre>();
GetData getData = new GetData(apiCredentials, apiServerParameters);
var outcome = getData.GetListOrInfo(Enums.ApiQueryType.GenreList);
XDocument xdoc = XDocument.Parse(outcome.Data.ToString());
foreach (var genre in xdoc.Descendants("genre"))
{
returns.Add(new Genre(genre));
}
return returns;
}
public static List<Language> GetLanguages(ApiCredentials apiCredentials = null, ApiServerParameters apiServerParameters = null)
{
List<Language> returns = new List<Language>();
GetData getData = new GetData(apiCredentials, apiServerParameters);
var outcome = getData.GetListOrInfo(Enums.ApiQueryType.LanguageList);
XDocument xdoc = XDocument.Parse(outcome.Data.ToString());
foreach (var language in xdoc.Descendants("langue"))
{
returns.Add(new Language(language));
}
return returns;
}
我已经弄清楚如何传递泛型
T
,但无法弄清楚如何引发类型T
的新实例:
public static List<T> GetList<T>(Enums.ApiQueryType queryType, string xElementName,
ApiCredentials apiCredentials = null, ApiServerParameters apiServerParameters = null)
{
List<T> returns = new List<T>();
GetData getData = new GetData(apiCredentials, apiServerParameters);
var outcome = getData.GetListOrInfo(queryType);
XDocument xdoc = XDocument.Parse(outcome.Data.ToString());
foreach (var element in xdoc.Descendants("genre"))
{
returns.Add(new T(element)); /// Doesn't compile
}
return null;
}
我该怎么做?
要么在 T 的构造函数上添加约束,要么使用 reflection 检索 T 的构造函数,该构造函数具有您要传递的类型的一个参数。