如何将未定义数量的类型参数传递给泛型方法?

时间:2017-10-18 08:17:15

标签: c# generics

我有一个泛型方法,它接受两个类型参数,第一个是一个类,它有一个项目列表,我将其类型作为第二个参数传递:

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

的概念

2 个答案:

答案 0 :(得分:0)

您在C#中建议的语法中的可变数量的类型参数是不可能的。话虽如此,可以使用类型描述符的序列如下。

public static GetComplexLog(int logIds, IEnumerable<Type> TypeSeq)
{
    // todo
}

使用此签名,可以使用反射对类型信息执行有用的操作,甚至可以创建实例。但是,静态类型检查以约束类型

where TJCls : ISplitList<TListObj>

也是不可能的,因为在运行时的类型安全性必须使用反射,并且可以做的最好的事情是在违规时抛出异常。

答案 1 :(得分:0)

不,你不能将参数之类的参数传递给泛型类型参数。在您的方案中,您可以将TListObj作为方法参数传递,对吗?