字典c#TryGetValue始终返回null
发布时间:2020-12-16 10:04:30 所属栏目:百科 来源:网络整理
导读:我有一个这样的简单字典: Dictionarystring[],object[] list = new Dictionarystring[],object[](); 我添加项目: list.Add(new string[] {"a","a","a"},new object[]{ }); 当我尝试按键获取值时出现问题 object[] values; if(list.TryGetValue(new string[
我有一个这样的简单字典:
Dictionary<string[],object[]> list = new Dictionary<string[],object[]>(); 我添加项目: list.Add(new string[] {"a","a","a"},new object[]{ }); 当我尝试按键获取值时出现问题 object[] values; if(list.TryGetValue(new string[] {"a",out values) { } 总是返回null.似乎他在字典中找不到这个键但是你可以看到有…… 感谢帮助 解决方法
如前所述,每个阵列确实是不同的对象.默认情况下,使用对象引用比较数组,而不考虑数组的实际内容.您可以通过实现自己的数组比较器来解决这个问题,如下所示:
class ArrayComparer<T> : IEqualityComparer<T[]> { public bool Equals(T[] x,T[] y) { return ((IStructuralEquatable) x).Equals((IStructuralEquatable) y,EqualityComparer<T>.Default); } public int GetHashCode(T[] obj) { return ((IStructuralEquatable) obj).GetHashCode(EqualityComparer<T>.Default); } } 它使用内置的Array功能(Array实现IStructuralEquatable)来提供与数组元素相关的相等和哈希码操作.然后你做: Dictionary<string[],object[]>(new ArrayComparer<string>()); 即使您传递不同的实例或数组,它也会工作.你是否应该有一个字典,其中键是数组是一个不同的故事…. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读