Dictionary泛型如何做参数使用

zhujiawei7 2009-12-26 01:53:22
我写了一个函数,需要一个Dictionary<K,V>的参数。
我参数写成Dictionary<Object,Object>类型,
但是这样无法接受Dictionary<string,string>等其他类型,只能接Object的。
重载写好像傻了点。。。
如何让参数Dictionary<> 能接受任何类型的Dictionary<>呢?
...全文
759 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhujiawei7 2010-01-04
  • 打赏
  • 举报
回复
public static bool CheckDictionary(System.Collections.IDictionary dictionary)

就这样定义
nyq1999 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 vrhero 的回复:]
将参数类型改成System.Collections.IDictionary...
[/Quote]
这个怎么解决的?我怎么看不出来,IDictionary<>接口能把键值类型都抽象出来?泛型参数Dictionary<>也有..
zhujiawei7 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 vrhero 的回复:]
走了一年的路还看不懂我在1楼的回答?那可以考虑改行了...
[/Quote]

不好意思,我已经用你的方法实现了,忘回帖了。
不过我被你伤到了

另外说一个,泛型定义成Object类型,是做不到我要求的事
gqqnb 2009-12-26
  • 打赏
  • 举报
回复
泛型约束呢?
如果你的几个具体类型实现某个接口或继承于某个父类,就用where限定一下
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhujiawei7 的回复:]
我写了一个函数,需要一个Dictionary <K,V>的参数。
我参数写成Dictionary <Object,Object>类型,
但是这样无法接受Dictionary <string,string>等其他类型,只能接Object的。
重载写好像傻了点。。。
如何让参数Dictionary <>  能接受任何类型的Dictionary <>呢?
[/Quote]

这样可行,但是对方法体的要求就太严了

楼主既然要用object类型,那说明没有特定的针对某一类型的算法,那就用个objcet吧
如果有针对特定类型的算法,就都分开来吧
你把特定类型,和字符串类型混在一个集合里,还能有什么针对特定类型的算法呢?
可能只是要个仓库?
ProjectDD 2009-12-26
  • 打赏
  • 举报
回复
作参数的方法加范型可以不

void X<n,v>(Dictionary<n,v> data);
king4323210 2009-12-26
  • 打赏
  • 举报
回复
用 OBJECT类型很好啊!
可以转换成任何类型!!
这样很灵活!
tkscascor 2009-12-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 vrhero 的回复:]
走了一年的路还看不懂我在1楼的回答?那可以考虑改行了...
[/Quote]
....
nyq1999 2009-12-26
  • 打赏
  • 举报
回复
protected void Page_Load(object sender, EventArgs e)
{
Dictionary<string, string> dic1 = new Dictionary<string, string>();
dic1.Add("一", "一");
Dictionary<int, int> dic2 = new Dictionary<int, int>();
dic2.Add(1, 1);
ResponseDic<string, string>(dic1, "一");
ResponseDic<int, int>(dic2, 1);

}
protected void ResponseDic<T, U>(Dictionary<T, U> Dic,T t)
{
Response.Write(Dic[t]);
}

不过我相信没几个人这么用泛型化参数的.....虽然能这么用....
nyq1999 2009-12-26
  • 打赏
  • 举报
回复
泛型化参数
sky_rv 2009-12-26
  • 打赏
  • 举报
回复
Dictionary <K,V> Dict=new Dictionary<K,V>;
这样就行了啊,等你用的时候在定义数据类型,但是本意上Dict只能用一种数据类型,因为这是泛型本身定的原因,

但是这样写你就可以在你用到了的时候直接指定数据类型不用声明的时候就指定数据类型来影响你的后续编程和使用,
vrhero 2009-12-26
  • 打赏
  • 举报
回复
走了一年的路还看不懂我在1楼的回答?那可以考虑改行了...
zhujiawei7 2009-12-26
  • 打赏
  • 举报
回复
承认没你强大,但也走了一年的路了
  • 打赏
  • 举报
回复
用到什么具体类型就设计什么具体类型,还没有走过几天路呢就想学超人?
zhujiawei7 2009-12-26
  • 打赏
  • 举报
回复
因为我有可能传进来的是Dictionary <string,string> 或者Dictionary <string,Model>等等类型的。
我就是希望这个函数都能被使用
haosa 2009-12-26
  • 打赏
  • 举报
回复
不知道LZ问什么要用Object?
Dictionary <K,V>
K:用string 类型;
V:可以用一个实体对象做参数,实体类中可以定义多种类型参数;

mngzilin 2009-12-26
  • 打赏
  • 举报
回复
支持string
tkscascor 2009-12-26
  • 打赏
  • 举报
回复
本来只能赋值给指定类型的啊


比如我有
class c1
{}
class c2:c1
{}

list<c1> c1=new list<c1>();
c1.add(new c1());
c1.add(new c2());
只能添加该类跟子类啊~
vrhero 2009-12-26
  • 打赏
  • 举报
回复
将参数类型改成System.Collections.IDictionary...
一、泛型 为什么要有泛型集合(List,Dictionary,LinkedList)? 1.为了避免装箱拆箱; 2.复用集合类里的 代码(算法) List List 1.概念 1.1官方:是一种特殊的【算法重用】机制。允许程序员在代码中将 变量或参数的类型 先用【类型占位符】来代替,等到运行的时候再根据传入的【类】来替换 通俗:类也可以带参数了!但是这个参数必须是 类型!用来在 类的代码中 暂时代替 类的位置,然后会在运行时,被替换。 【例子】: public class MyList { T[] arr; public MyList(T[] arrp) { arr = arrp; } } 2.语法 2.1泛型的运行 当 运行的时候,JIT会帮我们生成泛型类的不同版本,通过如下代码可以验证: //aa是MyList中一个int的静态变量 MyList.aa = 11; MyList.aa = 22; //照理说,同为MyList类的静态变量,应该保存最后一次赋值的 22 //但是输出的时候,确实生成了两个不同的版本 Console.WriteLine(MyList.aa.ToString());//11 Console.WriteLine(MyList.aa.ToString());//22 //由此看出,JIT在运行代码的时候,分别为带不同的 泛型参数 的MyList类生成了不同的版本。 MyList.dd = new Dog(); MyList.dd.age = 11; MyList.dd = new Dog(); MyList.dd.age = 22; Console.WriteLine(MyList.dd.age.ToString());//11 Console.WriteLine(MyList.dd.age.ToString());//22 【问题】为什么JIT在执行的是有要根据泛型类 MyList里的T 来产生不同的 MyList类的版本? 因为 只有当T确定为某种类型的时候,JIT才有可能计算出 当前MyList类的对象在内存中要分配多大的空间。 3.泛型约束 3.1基类约束 public class House where TPet:Dog //约束 TPet必须是 Dog或Dog的子类 where TPet2:Cat //约束 TPet必须是 Cat或Cat的子类 { TPet pet1; TPet2 pet2; }

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧