我应该使用我的对象作为字典键值还是连接字符串

我有以下课程


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);


阿晨1998
浏览 150回答 2
2回答

撒科打诨

看起来你想要的是一个 Hashset,因为键和值是相同的,你不想要重复。您将需要这个类来说明哪些对象是相等的。class MyObjectEqualityComparer : IEqualityComparer<MyObject>{&nbsp; &nbsp; MyObjectEqualityComparer()&nbsp; &nbsp; {&nbsp; &nbsp; }&nbsp; &nbsp; public static readonly MyObjectEqualityComparer Default = new MyObjectEqualityComparer();&nbsp; &nbsp; public bool Equals(MyObject x, MyObject y)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return x.Id1 == y.Id1 && x.Id2 == y.Id2 && x.Id3 == y.Id3;&nbsp; &nbsp; }&nbsp; &nbsp; public int GetHashCode(MyObject obj)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return obj.Id1.GetHashCode() ^ obj.Id2.GetHashCode() ^ obj.Id3.GetHashCode();&nbsp; &nbsp; }}然后做一个哈希集HashSet<MyObject> set = new HashSet<MyObject>(MyObjectEqualityComparer.Default);MyObject object1 = new MyObject(1,2,3);MyObject object2 = new MyObject(2,2,3);MyObject object3 = new MyObject(2,2,3);if(set.Add(object1)){&nbsp; &nbsp;// item was added.}else{&nbsp; &nbsp;// item already exist.}

梵蒂冈之花

覆盖Equals+&nbsp;GetHashCodeinMyObject或将自定义传递IEqualityComparer<MyObject>给字典构造函数但是将这个对象存储为键和值是没有意义的。也许你想用 aHashSet<MyObject>代替。
打开App,查看更多内容
随时随地看视频慕课网APP