首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Dictionary.ContainsKey()中使用类和结构有什么区别?

在Dictionary.ContainsKey()中使用类和结构有什么区别?
EN

Stack Overflow用户
提问于 2010-12-14 17:49:22
回答 1查看 715关注 0票数 0

下面是我的字典定义的一个示例。当我将DicKeys定义为class时,ContainsKey()无法工作。如果我将DicKeys更改为struct,它将正常工作。

为什么ContainsKey()classstruct上的工作方式不同

代码语言:javascript
复制
Dictionary<DicKeys, DicVals> aDic = new Dictionary<DicKeys, DicVals>();

// original version as below
public Class DicKeys 
{
   public EnKey1 DicKeyItem1,
   public EnKey2 DicKeyItem2,
}

// revised version as below
public struct DicKeys
{
   public EnKey1 DicKeyItem1,
   public EnKey2 DicKeyItem2,
}

// common parts of code below
public enum EnKey1 
{
   A1,
   A2,
}

public enum EnKey2 
{
   B11,
   B12,
}

DicKeys aDicKey = new DicKeys();
// assigned value to aDicKey obj here;

if (aDic.ContainsKey(aDicKey ) == true)  
{
 // do some thing here
 // If I defined as 'class', it doesn't hit here.
 // Updated to 'struct', it hit here.
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-14 17:50:45

那么,您还没有显示您正在填充字典的位置,或者sfTKey是什么……但我强烈怀疑这是因为您还没有覆盖DicKeys中的EqualsGetHashCode

默认情况下,类使用引用标识来表示相等-换句话说,只有当两个键引用引用完全相同的对象时,它们才会进行相等比较。但是,您可以覆盖EqualsGetHashCode以提供基于对象内容的等价性。值类型(结构)自动使用基于值的相等性,但我当然不建议使用像这里这样的可变结构。(老实说,我根本不推荐使用公共字段。)

有关您可能在EqualsGetHashCode中执行的操作的示例,请参阅this question,以及您可能希望在具有基于值的相等的类型上提供的其他一些成员。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4437827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档