日期:2014-05-18  浏览次数:20890 次

关于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用的是之前的引用,你只能用之前的那个引用才能找到
------解决方案--------------------
学习。。。。