0

初学者:想编写一个返回泛型集合的方法:

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”传递给方法不同类型的集合被初始化并需要返回?我怎样才能做到这一点?- 这是正确的方法吗?- 有任何链接可以获取有关通用用法的更多详细信息吗?

4

2 回答 2

1

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

于 2013-09-11T00:14:39.747 回答
0

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

        /// <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;
        }
于 2013-09-11T05:50:54.893 回答