不知道list类型的情况下,创建List object obj = Assembly.Load("my.DAL").CreateInstance("my.DAL." + str);//得到该类型的实例list<?> mylist=new list<?>如何创建List呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://blog.csdn.net/ojlovecd/article/details/2943968 var listType = typeof(List<>).MakeGenericType(obj.GetType());var list = Activator.CreateInstance(listType);不过Add什么的还要反射。 楼上的很全面了.想直接看到效果,运行下面的代码即可命令控制台程序 class Program { static void Main(string[] args) { Type tempListType = typeof(List<>); Type[] tempGenericTypeArgs = new Type[] { typeof(Student)}; tempListType = tempListType.MakeGenericType(tempGenericTypeArgs); Object tempList = Activator.CreateInstance(tempListType); Console.WriteLine(tempList.GetType().ToString()); } } public class Student { public String Name { get; set; } } 转换成object使用的时候再换回来 学习了,随便问个问题 就是我foreach的时候foreach(var item list){ 通常item的智能提示就是object的智能提示,请就纠结} 把foreach里面的var声明,改为具体的类型就可以了 C# codevar listType = typeof(List<>).MakeGenericType(obj.GetType());dynamic list = Activator.CreateInstance(listType);list.Add(xxxxxx);Add的时候就不用反射了 既然不知道类型,我觉得可以使用object或者非泛型版本的ArrayList。如果下文还要那个调用那个obj的方法,直接声明为 dynamic obj将为你省下来许多代码。要求List内的对象类型单一的话,结合2楼的代码和dynamic声明:var listType = typeof(List<>).MakeGenericType(obj.GetType());dynamic list = Activator.CreateInstance(listType);list.Add(....) public T GetClass<T>(string str){ object obj = Assembly.Load("my.DAL").CreateInstance("my.DAL." + str); return (T)obj; } public class MyList<T>{private List<T> m_lValues = new List<T>();public void Add(T t){m_lValues.Add(t);}//..}object obj = Assembly.Load("my.DAL").CreateInstance("my.DAL." + str);//得到该类型的实例MyList<MyObject> mylist = new MyList<MyObject>();MyObject tmp = obj as MyObject; // 这里你应该是知道类型的吧。if (tmp != null){mylist.Add(tmp);} 跨线程调用控件的问题。。。 去掉datalist 里<ItemTemplate>生成的tr td C# 卸载 outLook 插件 Windows程序在DataGridview中怎样用回车代替Tab 求救:C# 和 mysql 共同使用时的乱码问题 有关dataset 请问如何得到窗体内的当前焦点在哪个控件上?谢谢 EXCEL 连接读写问题 c#取sybase数据库返回值问题 GZipStream 解压缩 list数组转为json 求WPF 树形+表格 控件 c# winform 程序 timer 控件 调方法 假死
var list = Activator.CreateInstance(listType);不过Add什么的还要反射。
命令控制台程序
class Program
{
static void Main(string[] args)
{
Type tempListType = typeof(List<>);
Type[] tempGenericTypeArgs = new Type[] { typeof(Student)};
tempListType = tempListType.MakeGenericType(tempGenericTypeArgs);
Object tempList = Activator.CreateInstance(tempListType);
Console.WriteLine(tempList.GetType().ToString());
}
}
public class Student
{
public String Name { get; set; }
}
学习了,随便问个问题 就是我foreach的时候
foreach(var item list)
{
通常item的智能提示就是object的智能提示,请就纠结
}
var listType = typeof(List<>).MakeGenericType(obj.GetType());
dynamic list = Activator.CreateInstance(listType);
list.Add(xxxxxx);
Add的时候就不用反射了
如果下文还要那个调用那个obj的方法,直接声明为 dynamic obj将为你省下来许多代码。
要求List内的对象类型单一的话,结合2楼的代码和dynamic声明:var listType = typeof(List<>).MakeGenericType(obj.GetType());
dynamic list = Activator.CreateInstance(listType);
list.Add(....)
public T GetClass<T>(string str)
{
object obj = Assembly.Load("my.DAL").CreateInstance("my.DAL." + str);
return (T)obj;
}
{
private List<T> m_lValues = new List<T>();public void Add(T t)
{
m_lValues.Add(t);
}
//..
}object obj = Assembly.Load("my.DAL").CreateInstance("my.DAL." + str);//得到该类型的实例MyList<MyObject> mylist = new MyList<MyObject>();
MyObject tmp = obj as MyObject; // 这里你应该是知道类型的吧。
if (tmp != null)
{
mylist.Add(tmp);
}