[英]How to pass a parameter to declare generic type list?
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);
}
}
}
这是我的代码。 我试图将一个类型参数传递给私有方法来声明泛型类型列表......但我不知道该怎么做。
参数接受者是一个列表。 在这种情况下,接受者正在存储一般类型的对象。 参数类型是泛型的类型。
我在互联网上搜索了一段时间。 我仍然不确定如何做到这一点。
尝试制作通用方法:
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的listSize
习惯并且总是等于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>();
...
}
您应该创建一个Generic方法。 泛型充当C#中的模板。 声明时绑定方法。
public void ListHelper<T>//...
List<T> my list//...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.