目前要实现一个这样的功能:通过一个方法添加多种类型的对象列表 所有类型都派生自 BaseItem
通过泛如何实现????????class a:BaseItem
{
}
class b:BaseItem
{
}
class c:BaseItem
{
}
List<a> lista = new List<a>();
List<b> listb = new List<b>();
List<c> listc = new List<c>();public bool AddItem(lista,listb,listc)
{
base.addItemList<T>(lista);//T可能为a,b,c对于addItemList中已约束T必须派生自BaseItem
}请问 AddItem这个方法如何写,,主要是参数如何传递。
通过泛如何实现????????class a:BaseItem
{
}
class b:BaseItem
{
}
class c:BaseItem
{
}
List<a> lista = new List<a>();
List<b> listb = new List<b>();
List<c> listc = new List<c>();public bool AddItem(lista,listb,listc)
{
base.addItemList<T>(lista);//T可能为a,b,c对于addItemList中已约束T必须派生自BaseItem
}请问 AddItem这个方法如何写,,主要是参数如何传递。
解决方案 »
- c# 如何过设定时间间隔后再触发一个函数?
- 菜鳥在线求!!!!
- 请问如何写类似qq的远程协助功能
- 急请高手和版主帮助!!一个asp.net程序在服务器上,我从本机去访问运行可出现如下错误(An application error occurred on the server..
- 问个肤浅的问题好吗
- 在WINFORM程序,通过EXCEL.APPLICATION方式,修改了EXCEL表,为何程序里总是跳出确认框,能不能不跳出确认框,默认都是执行确认的。。
- 有人使用过Infragistics--ultraGrid 这个网格控件的吗, 请给出示例代码
- 求知道代码中LIST.ADD()的属性里面传哪个对象
- 用c#+xml做无刷新聊天室
- 怎样命名一个实例
- 串口设置 -请高手赐教(有图)
- 关于不规则txt文件导出的问题(急!!!)
{
List<a> la = new List<a>();
List<b> lb = new List<b>();
List<c> lc = new List<c>(); la.AddRange(lista.ConvertAll<a>(delegate (BaseItem Item){return (a)Item;}));
lb.AddRange(listb.ConvertAll<a>(delegate(BaseItem Item) { return (b)Item; }));
lc.AddRange(listc.ConvertAll<a>(delegate(BaseItem Item) { return (c)Item; }));
return true;
}
lb.AddRange(listb.ConvertAll<b>(delegate(BaseItem Item) { return (b)Item; }));
lc.AddRange(listc.ConvertAll<c>(delegate(BaseItem Item) { return (c)Item; }));
{
}
class b : BaseItem
{
}
class c : BaseItem
{
}
class BaseItem
{
}
class Class1
{
List<a> lista = new List<a>();
List<b> listb = new List<b>();
List<c> listc = new List<c>(); public bool AddItem(BaseItem lista,BaseItem listb,BaseItem listc)
{
List<BaseItem> addItemList = new List<BaseItem>();//T可能为a,b,c对于addItemList中已约束T必须派生自BaseItem
addItemList.Add(lista);
addItemList.Add(listb);
addItemList.Add(listc);
return true;
}
}
{
//是这么写的吗
}
{
try
{
t.Create();
return true;
}
catch
{
return false;
}
}if (DataAccess.DataAccess.GetDb.Add<Entity.AwardpunishInfo>(ap))//就是你需要的类型
{
return "添加成功";
}
else
{
return "添加失败";
}
补充说明:
我需要带n个对象类型的List列表进去。而不是一个。类型方法必须要求是强类型。而不能通过getType和typeof动态得到。。例如:
class a:BaseItem
{
}
class b:BaseItem
{
}
class c:BaseItem
{
}
List <a> lista = new List <a>();
List <b> listb = new List <b>();
List <c> listc = new List <c>(); 知道参数个数的话我可以这样实现:public bool AddItem<a,b,c>(List<a> lista,List<b> listb,List<c> listc)
{
base.addItemList<a>(lista);
base.addItemList<b>(listb);
base.addItemList<c>(listc);
} 而我想实现的是AddItem的参数可以是多个。如parames 一样。而不是固定几个。
请问如何实现???
约束。这个在接口和基类里面已经约束。。并且都加入了new()约束。。允许直接实例化我只想知道AddItem的参数可以为任意多个。如parames 一样。而不是固定几个。
请问如何实现???
{
...
}
请问如何实现???你的意思是AddItem方法可以带多个参数是吧?
请问如何实现??? 你的意思是AddItem方法可以带多个参数是吧?
是的。我就是希望能带多个参数,每个参数都是一种派生自BaseItem类型的List对象列表请问有好的办法吗? guoyichao 的这个意思不对虽然参数多个。但是类型T只有一种不是我想要的。
public bool AddItem <T>(params List <T>[] args)
{
...
}
public bool AddItem <in T>(params List <T>[] args)
{
...
}
protected virtual IList<Entity> GetEntityList(IDataReader dr)
{
IList<Entity> _list = new List<Entity>();
EntityBuilder<Entity> _eb = EntityBuilder<Entity>.CreateBuilder(dr);
while(dr.Read())
{
_list.Add(_eb.Build(dr));
}
dr.Close();
dr.Dispose();
return _list;
}
发送私信
在线聊天
gui0605
菜菜
等级:
可用分等级:掌柜
总技术分:11012
总技术分排名:1909 发表于:2009-06-09 18:33:1519楼 得分:0
C# code
protected virtual IList<Entity> GetEntityList(IDataReader dr)
{
IList<Entity> _list = new List<Entity>();
EntityBuilder<Entity> _eb = EntityBuilder<Entity>.CreateBuilder(dr);
while(dr.Read())
{
_list.Add(_eb.Build(dr));
}
dr.Close();
dr.Dispose();
return _list;
}
这个看到不是很明白好像跟本题没关系吧[color=#FF0000][/color]
guoyichao
等级:
可用分等级:掌柜
总技术分:1431
总技术分排名:15651 发表于:2009-06-09 18:18:1018楼 得分:0
C#4.0支持逆变:
public bool AddItem <in T>(params List <T>[] args)
{
...
}
我用的是2.0 还有别的办法吗?
在.net 2.0里面即使T1和T2有继承关系,List<T1>和List<T2>被认为是没有任何关系的
所以,在用params时,需要把类型定义成一个公共的抽象的类型,例如IList类型方法必须要求是强类型
如果参数被定义成:params IList[] lists,那么就不是强类型的
而且不用GetType动态得到真实类型的话,编译时根本无法知道具体类型所以,无解变通方法:
学习Action<T>,Action<T1,T2>,Action<T1,T2,T3>...的用法,.net 4.0里面就定义了15个Action,一般情况下够用了
我需要带n个对象类型的List列表进去。而不是一个。类型方法必须要求是强类型。而不能通过getType和typeof动态得到。。
为什么?你都继承与BASEITEM,你一个T就可以了。
其次为什么你这里要用泛型?你这里明明就用一个BASEITEM就可以了。
不要为了用泛型而用,泛型只是一种辅助手段。