【发布时间】:2014-09-05 18:02:38
【问题描述】:
假设以下方法,我知道它不起作用:
我想创建一个泛型类型的新实例
public List<TPer> getDATA<TPer>(TPer per, int acao) where TDal: new()
{
//Is it possible create a new instance of a generic type inside the body of a generic method?
TDal dal = new TDal(); //<-- I know it is NOT OK
List<TPer> lst = new List<TPer>();
lst = dal.getDATA(per, acao);
return lst;
}
我可以这样写:
List<TPer> getDATA<TPer,TDal>(TPer per, int acao) where TDal: new()
但是,将调用此方法的程序无权访问TDal:
是否可以使用空参数调用此方法?还是在泛型方法体内创建一个泛型类型的新实例?
<TDal> 也将是泛型的,但我不知道是否可以在 C# 中的这个泛型方法中创建它作为新的泛型类型。
【问题讨论】:
-
我不知道您想要达到什么目的 - 或者您为什么要创建一个新的
List<TPer>然后立即丢弃它。TDal dal = new TDal()“不行”是怎么回事? -
该方法的第一个版本没有显示
TDal应该是什么以及它来自哪里。怎么样? -
如果你编辑你的previous question而不是重新发布会更好。
-
@JonSkeet,由于编译器错误,这不正常:“找不到类型或命名空间名称 'TDal'”。而 lst 是方法的返回。
-
@Jon,谢谢你的评论,我想做一个TDal的新实例,TDal也是通用的,但我不知道是否可以在这个通用方法中创建它在 C# 中。
标签: c# generics optimization parameters instance