【发布时间】:2017-06-26 08:23:02
【问题描述】:
如果模板是列表,我必须创建填充数据的列表。我有一个功能
static T GenerateRandomFields<T>() where T:new()
{
var ret= new T();
if (typeof(T)==typeof(List<>))
{
var leng = rnd.Next(50);
List<typeof(T).GenericTypeArguments[0]> test;
for (int i = 0; i < leng; i++)
((List<>)ret).Add(...);
return ret;
}
...
}
但是不可能将 ret 转换为 List。 ret如何添加数据?
【问题讨论】:
-
你的方法签名指定返回类型是
T,而不是List<T>。你想做什么?如果 T 是 List,是否要返回List<List<TWhatever>>? -
您可以使用
IList<TItem>约束创建另一个方法。这将允许您直接使用IList<T>方法,例如ret.Add并返回该列表 -
对非集合类型
T调用这个方法有意义和正确吗?方法名称听起来很像它只是用于集合。 -
不要这样做。这是对泛型的滥用。泛型应该是generic;如果您有专门列表的行为,那么它不是通用。
标签: c#