为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
阿晨1998 2021-06-27 12:47:20
我有以下课程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);
查看完整描述

2 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

看起来你想要的是一个 Hashset,因为键和值是相同的,你不想要重复。


您将需要这个类来说明哪些对象是相等的。


class MyObjectEqualityComparer : IEqualityComparer<MyObject>

{

    MyObjectEqualityComparer()

    {

    }


    public static readonly MyObjectEqualityComparer Default = new MyObjectEqualityComparer();


    public bool Equals(MyObject x, MyObject y)

    {

        return x.Id1 == y.Id1 && x.Id2 == y.Id2 && x.Id3 == y.Id3;

    }


    public int GetHashCode(MyObject obj)

    {

        return obj.Id1.GetHashCode() ^ obj.Id2.GetHashCode() ^ obj.Id3.GetHashCode();

    }

}

然后做一个哈希集


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

{

   // item was added.

}

else

{

   // item already exist.

}


查看完整回答
反对 回复 2021-07-03
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

  1. 覆盖EqualsGetHashCodeinMyObject

  2. 将自定义传递IEqualityComparer<MyObject>给字典构造函数

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


查看完整回答
反对 回复 2021-07-03
  • 2 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号