首页 新闻 会员 周边

求一个关于反射的问题

0
悬赏园豆:20 [已解决问题] 解决于 2012-07-26 14:25

传一个字符串 如:string "User"

存在User这么一个类

我现在需要把这个传进来的字符放到IList<User>

请问如何操作?

public IList<Object> GetList(String eStr)

{

  ///这里通过eStr里的值得到相应的类名 如User

  然后去创建List返回

  return New List<XXX>(); //这个XXX表示eStr传进来的类型

}

求解。。

网络农民的主页 网络农民 | 初学一级 | 园豆:63
提问于:2012-07-26 10:47
< >
分享
最佳答案
0

可以通过泛型 来定义:如

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>();
}
}

收获园豆:15
johden2 | 菜鸟二级 |园豆:352 | 2012-07-26 11:55

感谢兄弟,这种方式让我轻松搞定

网络农民 | 园豆:63 (初学一级) | 2012-07-26 14:24
其他回答(3)
0

使用:Activator.CreateInstance("xxx.dll",eStr)

如果是当前程序集:

public IList<Object> GetList(String eStr)
{
      object  XXX = Activator.CreateInstance(null,eStr);
  return New List<XXX>(); //这个XXX表示eStr传进来的类型
}
收获园豆:5
Jerry Chou | 园豆:2642 (老鸟四级) | 2012-07-26 11:53

很明显

object  XXX = Activator.CreateInstance(null,eStr);
  
return New List<XXX>();

这个XXX这里会出错的,因为XXX那里只能放类名,不能放对象。。。。。

支持(0) 反对(0) 网络农民 | 园豆:63 (初学一级) | 2012-07-26 12:00

@网络农民: 你看看能不能接近你要的

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;
}
支持(0) 反对(0) Jerry Chou | 园豆:2642 (老鸟四级) | 2012-07-26 13:53
0

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

imap | 园豆:432 (菜鸟二级) | 2012-07-26 12:07
0

TYPE的MakeGenericType方法来设置

56180825 | 园豆:1756 (小虾三级) | 2012-07-26 13:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册