读书人

关于C#字典的有关问题

发布时间: 2012-08-21 13:00:22 作者: rapoo

关于C#字典的问题
Dictionary<object[], string> dic = new Dictionary<object[],string>();
object[] key = new object[] { "123", "abc" };
dic.Add(key, "first");
object[] key2 = new object[] { "123", "abc" };

//dic.ContainsKey(key) --- true
//dic.ContainsKey(key2)--- false

我创建一个object[]的副本,如何让字典能找到对应的值?


[解决办法]
object[] key = new object[] { "123", "abc" };
object[] key2 = new object[] { "123", "abc" };
key和key2是不同的两个对象

[解决办法]
这个问题很怪异,第一次遇到
[解决办法]
Mark~
[解决办法]

C# code
Dictionary<object[], string> dic = new Dictionary<object[], string>();            object[] key = new object[] { "123", "abc" };            dic.Add(key, "first");            object[] key2 = new object[] { "123", "abc" };            Console.WriteLine(dic[key]);//根据key获取对应的value            Console.ReadLine();
[解决办法]
帮你UP下吧~
[解决办法]
这样做一定是不行的,你需要定义一个比较类
public class MyComparer : IEqualityComparer<object[]>
{
public static readonly MyComparer Instance = new MyComparer();
private MyComparer()
{
}

public int GetHashCode(object[] obj)
{
return obj.GetHashCode();
}

public bool Equals(object[] obj1, object[] obj2)
{
.....
}
}

然后

private Dictionary <object[], string> dic = new Dictionary <object[], string>(MyComparer.Instance);


或者

把 object[] 放到一个对象,重写这个对象的 Equals

[解决办法]
老兄,你的程序是不是设计有问题?
个人认为,你需要解决的问题,应该可以通过其他方法来解决
字典Dictionary的键值的类型虽然提供泛型,但是它的本意不在于希望你存一个object,如果你存的是对象,相信你需要获得对象所对应的值得地方也可以得到该对象,不然毫无意义
提供泛型是因为程序运行中,不会导致种类型转换
[解决办法]
没法找到,因为不是不同的引用了,字典里的key用的是之前的引用,你只能用之前的那个引用才能找到
[解决办法]
学习。。。。

读书人网 >C#

热点推荐