如何传递参数来声明泛型类型列表?


private void listHelper (int listSize, ref Object taker, Object giver, Type type)
{
if (listSize == 0)
{
taker = null;
}
else
{
taker = new List<type>(listSize);
giverType tempGiver;
for (int i = 0; i < listSize; i++)
{
type= new type();
tempGiver.value = giver[i];
taker.Add(tempGiver);
}
}
}

这是我的代码。我尝试将类型参数传递给私有方法以声明泛型类型列表...但我不知道该怎么办。

参数接受者是一个列表。在本例中,taker 存储的是通用类型的对象。 参数类型是泛型的类型。

我已经在互联网上搜索了一段时间。我仍然不确定如何做到这一点。

尝试创建一个泛型方法:

private void listHelper<T> (int listSize, out List<T> taker, IList<T> giver)
{
if (listSize == 0)
{
taker = null;
}
else
{
taker = new List<T>(listSize);
for (int i = 0; i < listSize; i++)
{
taker.Add(giver[i]);
}
}
}

此外,我建议使用out而不是ref(就像我所做的那样),因为您总是在返回之前为taker分配一个值。这允许调用代码在调用方法之前不必分配虚拟值。

或者更好的是,您应该返回列表

private List<T> listHelper<T> (int listSize, IList<T> giver)
{
List<T> taker;
...
return taker;
}

请注意,如果您的方法所做的只是将所有元素从giver复制到taker(也就是说,指定listSize实际上只是编码 C 的保留习惯,并且始终等于giver中的元素数量),您可以替换giver.Count或只执行:

private List<T> listHelper<T> (IList<T> giver)
{
return giver.Any() ? giver.ToList() : null;
}

当然,如果listSize真的是"要返回的元素数,从前面开始"giver,你可以做到:

private List<T> listHelper<T> (IList<T> giver, int numElements)
{
return giver.Any() ? giver.Take(numElements).ToList() : null;
}

实际上,进一步阅读您的问题,看起来您想实例化某种类型的新对象并将其value属性设置为giver中的项目。那么这个怎么样(当然,我对你的taker对象有很多假设,并且你有一个接口ITaker<U>指定一个字段/属性public U value):

private List<T<U>> listHelper<T, U> (IList<U> giver) where T : ITaker<U>, new()
{
return giver.Any() ? giver.Select(g => new T<U>() {value = g}).ToList() : null;
}

我想它是这样的:

private void ListHelper<T>(int listSize, ref object taker, object giver)
{
...
List<T> list = new List<T>();
...
}

你应该创建一个泛型方法。 泛型在 C# 中充当模板。 该方法在声明时是绑定的。

public void ListHelper<T>//...
List<T>  my list//...

最新更新