如何根据输入返回集合(泛型)

本文关键字:泛型 集合 返回 何根 输入 | 更新日期: 2023-09-27 18:31:01

初学者:想要编写一个方法以将泛型集合返回为:

public IEnumerable<T> ABC( string x){
if( x== "1")
{ Collection<A> needs to be returned}
if(x=="2")
{ Collection<B> needs to be returned}
..
so on
}

问题:- 基于传递给方法的"X"初始化不同类型的集合并需要返回?我该怎么做?- 这是正确的方法吗?- 任何链接以获取有关通用用法的更多详细信息?

如何根据输入返回集合(泛型)

AFAIK,类型参数(此处为 T)必须在编译时知道。这意味着它在运行时无法更改。你可以做的是让它IEnumerable<Object>。由于所有其他类型都将 Object 作为基类型,因此我很确定此时您可以返回任何内容的 IEnumerable。虽然你可能需要在途中投射/投出对象。

不需要传递字符串来识别类的类型.只需使用以下泛型方法调用,它将初始化该T类型的List。

        /// <summary>
        /// Gets the initialize generic list.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public IList<T> GetInitializeGenericList<T>() where T : class
        {
            Type t = typeof(List<>);
            Type typeArgs =typeof(T);
            Type type = t.MakeGenericType(typeArgs);
            // Create the List according to Type T
            dynamic reportBlockEntityCollection = Activator.CreateInstance(type);
            // If you want to pull the data into initialized list you can fill the data
            //dynamic entityObject = Activator.CreateInstance(typeArgs);
            //reportBlockEntityCollection.Add(entityObject);
            return reportBlockEntityCollection;
        }