public Dictionary<object,object> GetDetails(Type Classname){ MvcDemoDBEntitIEs db = new MvcDemoDBEntitIEs(); Dictionary<Classname,object> dict = new Dictionary<Classname,object>(); var data = (from h in db.People select h).ToList(); foreach (var item in data) { dict.Add(data,true); } return dict;}
我究竟做错了什么
我想动态地用类名调用这个函数,如下所示:
List<people> List = GetDetails(people).Keys.ToList();
人是我的班级名字.
解决方法 使用泛型你目前的做法会给你带来很多麻烦.当您要为类传递Type对象时,您需要反射才能创建Dictionary.
作为替代方案,我建议您创建一个通用方法:
public Dictionary<object,object> GetDetails<TClass>(){ MvcDemoDBEntitIEs db = new MvcDemoDBEntitIEs(); Dictionary<TClass,object> dict = new Dictionary<TClass,object>(); var data = (from h in db.People select h).ToList(); foreach (var item in data) { dict.Add(data,true); } return dict;}
像这样用它:
List<people> List = GetDetails<people>().Keys.ToList();
使用Type
当然,这可以使用Type对象来完成,这需要使用反射来创建一个我们不知道的类型的对象(该对象是字典).这样做如下:
public Dictionary<object,object> GetDetails(Type Class){ //Null check if (null == Class) { throw new ArgumentNullException("Class"); } MvcDemoDBEntitIEs db = new MvcDemoDBEntitIEs(); //Get the generic dictionary type: Type DictType = typeof(Dictionary<,>).MakeGenericType(Class,typeof(object)); //Create the dictionary object: object dict = Activator.CreateInstance(typeof(DictType)); //Get the Add method: var add = DictType.getmethod("Add",new Type[]{Class,typeof(object)}); var data = (from h in db.People select h).ToList(); foreach (var item in data) { //add to the dictionary: add.Invoke(dict,new object[]{item,true}); } return dict;}
使用这样:
List<people> List = GetDetails(typeof(people)).Keys.ToList();
深层发掘
我注意到你有这条线:
var data = (from h in db.People select h).ToList();
您可能有兴趣将People更改为与您传入的类的名称相匹配的属性.这只能通过反射存档.以与我们如何获得字典的Add方法类似的方式,我们可以从对象db获取属性,该属性由参数类型给出.
我将把它作为第一种方法调用.
使用泛型
public IEnumerable<TClass> GetCollection<TClass>(MvcDemoDBEntitIEs db){ //get the type of db var dbType = db.GetType(); //get the name of the type TClass var name = typeof(TClass).name; //get the property var prop = dbType.GetProperty(name); //read the property and return return prop.GetValue(db);}
要使用,请将其替换为:
var data = (from h in db.People select h).ToList();
有了这个:
var data = (from h in GetCollection<TClass>(db) select h).ToList();
使用Type
这里的斗争是我们不知道项目类型…所以我将使用IEnumerable.
public IEnumerable GetCollection(MvcDemoDBEntitIEs db,Type Class){ //get the type of db var dbType = db.GetType(); //get the name of the type Class var name = Class.name; //get the property var prop = dbType.GetProperty(name); //read the property and return return prop.GetValue(db);}
要使用,请将其替换为:
var data = (from h in db.People select h).ToList();
有了这个:
var data = (from h in GetCollection(db,Class).Cast<object>() select h).ToList();总结
以上是内存溢出为你收集整理的将类类型作为参数c#传递并与字典一起使用全部内容,希望文章能够帮你解决将类类型作为参数c#传递并与字典一起使用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)