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

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

概述private void listHelper (int listSize, ref Object taker, Object giver, Type type) { if (listSize == 0) { taker = null; } else { take
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;}
总结

以上是内存溢出为你收集整理的c# – 如何传递参数来声明泛型类型列表?全部内容,希望文章能够帮你解决c# – 如何传递参数来声明泛型类型列表?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1223586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存