日期:2014-05-20  浏览次数:21022 次

C#泛型能否多主键的Dictionary<TKey, TValue>
我想使用如下

MyDictionary<int, int, object> dir1 = new MyDictionary<int, int, object>();
MyDictionary<int, int, string, object> dir2 = new MyDictionary<int, int, string, object>();

前面的全部是主键,最后一个是值
突发奇想,在此请教。
我觉得如果可以实现,将很好用.
------解决方案--------------------
TKey, TValue 本来就是泛型,可以接受任何类型的参数
------解决方案--------------------
把后面的value写成一个类不就行了
------解决方案--------------------
你可以将所有的主键封装成一个类,
比如
class KeyClass
{
int Key1;
int Key2;
int Key3;
}
然后声明
Dictionary<KeyClass, object>
比对主键时,比对KeyClass中所有的键值

------解决方案--------------------
实现并不难,实际上从哈希表的角度来说,就是多个Hash值指向同一个指针。
问题是你需要多少键值,其实把多个Dictionary封装一个List<Of Dictionary<key,value>>,value全部相同,想要几个键值都可以。
------解决方案--------------------
Dictionary 其实不管你啥主键不关键的,人家要的是hashcode 你自己改写hashcode的计算方式就ok
------解决方案--------------------
你自己把 

bool Equals(object obj)

int GetHashCode()

两个方法overide一下就可以了
------解决方案--------------------
应该没有必要弄得那么繁琐,把多个值加起来拼成一个键应该就够用了.
------解决方案--------------------
范型跟主键怎么纠结在一起?
------解决方案--------------------
引用:
引用:你自己把 

bool Equals(object obj)

int GetHashCode()

两个方法overide一下就可以了

看来要通过泛型实现,需要C#语法支持才可以
上一个实现了相同效果的代码

C# code?12345678910111213141516171819202122        public c……


如果你想整DataTable的话,那么把Dictionary搞进来干什么呢?你可以自己设计一个Dictionary2<A,B,C>嘛。

这跟范型没有关系,这跟Dictionary的基本概念有关系。你根本就是另类地要求Dictionary不是原本的Dictionary了,而成了自己随便写的List<C>了。