首页 > 解决方案 > 我应该使用我的对象作为字典键值还是连接字符串

问题描述

我有以下课程

public class MyObject
{
    public int Id1 {get;set;}
    public int Id2 {get;set;}
    public int Id3 {get;set;}

    public MyObject(int id1, int id2, int id3)
    {
      this.Id1 = id1;
      this.Id2 = id2;
      this.Id3 = id3;
    }
}

我想在字典中创建一个对象列表。我最好这样做吗

Dictionary<MyObject, MyObject> dictionary = new Dictionary<MyObject,MyObject>();

MyObject object1 = new MyObject(1,2,3);
MyObject object2 = new MyObject(2,2,3);
MyObject object3 = new MyObject(2,2,3);

if(!dictionary.ContainsKey(object1))
  dictionary.Add(object1,object1);

if(!dictionary.ContainsKey(object2))
  dictionary.Add(object2,object2);

if(!dictionary.ContainsKey(object3))
  dictionary.Add(object3,object3);

或者我应该创建一个字典,其键是一个字符串,并包含连接的字符串。例如

Dictionary<string, MyObject> dictionary2 = new Dictionary<string,MyObject>();

string key = object1.Id1 + "|" + object1.Id2 + "|" + object1.Id3;

if(!dictionary2.ContainsKey(key ))
  dictionary2.Add(key ,object1);

标签: c#dictionary

解决方案


  1. 覆盖Equals+ GetHashCodeinMyObject
  2. 将自定义传递IEqualityComparer<MyObject>给字典构造函数

但是将此对象存储为键和值是没有意义的。也许你想用 aHashSet<MyObject>代替。


推荐阅读