我有一个泛型方法,它接受两个类型参数,第一个是一个类,它有一个项目列表,我将其类型作为第二个参数传递:
public static TJCls GetComplexLog<TJCls, TListObj>(int logIds) where TJCls : ISplitList<TListObj>
{
//here I deserialize the string from DB to TJCls, and deserialize List<string>
//from DB to List<TListObj> and set the TJCls's list via the ISplitList's SetList method:
log.SetList(lst);
}
但是现在该对象可能有多个列表(未知数),所以有没有办法可以传递任意数量的类型参数,比如params
答案 0 :(得分:0)
您在C#中建议的语法中的可变数量的类型参数是不可能的。话虽如此,可以使用类型描述符的序列如下。
public static GetComplexLog(int logIds, IEnumerable<Type> TypeSeq)
{
// todo
}
使用此签名,可以使用反射对类型信息执行有用的操作,甚至可以创建实例。但是,静态类型检查以约束类型
where TJCls : ISplitList<TListObj>
也是不可能的,因为在运行时的类型安全性必须使用反射,并且可以做的最好的事情是在违规时抛出异常。
答案 1 :(得分:0)
不,你不能将参数之类的参数传递给泛型类型参数。在您的方案中,您可以将TListObj作为方法参数传递,对吗?