可以通过泛型 来定义:如
public class User
{
public string UserName{get; set;}
}
public class UserRole
{
public string RoleName { get; set; }
}
public class CommonService
{
public IList<T> GetList<T>() where T : class, new()
{
//数据来源
IList<T> list = new List<T>();
list.Add(new T());
return list;
}
public void Test()
{
IList<User> listUser = GetList<User>();
IList<UserRole> listUserRole = GetList<UserRole>();
}
}
感谢兄弟,这种方式让我轻松搞定
使用:Activator.CreateInstance("xxx.dll",eStr)
如果是当前程序集:
public IList<Object> GetList(String eStr) { object XXX = Activator.CreateInstance(null,eStr); return New List<XXX>(); //这个XXX表示eStr传进来的类型 }
很明显
object XXX = Activator.CreateInstance(null,eStr);
return New List<XXX>();
这个XXX这里会出错的,因为XXX那里只能放类名,不能放对象。。。。。
@网络农民: 你看看能不能接近你要的
public static IList<object> GetList(String eStr) { var genericList = typeof(List<>); var sType = Type.GetType(eStr); var tmp = Activator.CreateInstance(genericList.MakeGenericType(sType)) as IEnumerable<object>; var lst = tmp.Cast<object>().ToList(); return lst; }
public class User
{
public int Age { get; set; }
public string Name { get; set; }
}
public sealed class ReflectHelper
{
public static IList<object> GetList(string typeName)
{
Assembly asm= Assembly.GetExecutingAssembly();
if (!typeName.Contains(asm.GetName().Name))
{
typeName = asm.GetName().Name + "." + typeName;
}
object obj = asm.CreateInstance(typeName);
return Array.CreateInstance(obj.GetType(), 10).Cast<object>().ToList();
}
}
class Program
{
static void Main(string[] args)
{
var aa = ReflectHelper.GetList("User");
Console.Read();
}//
}//fun
TYPE的MakeGenericType方法来设置