c# - 我应该使用我的对象作为字典键值还是连接字符串
问题描述
我有以下课程
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);
解决方案
- 覆盖
Equals
+GetHashCode
inMyObject
或 - 将自定义传递
IEqualityComparer<MyObject>
给字典构造函数
但是将此对象存储为键和值是没有意义的。也许你想用 aHashSet<MyObject>
代替。
推荐阅读
- jenkins - Jenkins 管道:java.lang.NoSuchMethodError:没有这样的 DSL 方法 'gitlabCommitStatus'
- webpack - 如何使用 webpack 让 syncfusion 在 aurelia 电子应用程序中工作?
- django - Django 电子邮件模板编码
- drawing - SVG.js 如何更新图案比例和位置?
- routes - 路由 Laravel 5.7 中缺少必需的参数
- mysql - SQL user defined function not run
- python - serial.serialutil.SerialException: could not open port /dev/ttyAMA0: [Errno 13] Permission denied: '/dev/ttyAMA0'
- ios - UISearchController's UISearchBar shifts incorrectly and jumps when UITableView is scrolled
- pharo - How can I show a progress bar in Pharo?
- iis - IIS 多服务器场配置?