加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 00:21:31 所属栏目:百科 来源:网络整理
导读:private void listHelper (int listSize,ref Object taker,Object giver,Type type) { if (listSize == 0) { taker = null; } else { taker = new Listtype(listSize); giverType tempGiver; for (int i = 0; i listSize; i++) { type= new type(); tempGive
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;
}

注意,如果你所有的方法都在做的是将所有元素从给予者复制到接受者(也就是说,指定listSize实际上只是编码C的延迟习惯并且总是等于给予者中的元素数量),你可以替换giver.Count或者做就是了:

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

当然,如果listSize真的是“返回的元素数量,从提供者的前面开始”,你可以这样做:

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

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

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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读