如何根据输入返回集合(泛型)
本文关键字:泛型 集合 返回 何根 输入 | 更新日期: 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;
}