到现在为止我有2个字典的Dictionary<string, int>
类型,需要得到的所有内容在dict1
但不在dict2
使用except
。例如:使用除对象为字典的字典
Dictionary<string, int> dict1 = new Dictionary<string, int>
{
{ "aaa", 1 },
{ "bbb", 2 }
};
Dictionary<string, int> dict2 = new Dictionary<string, int>
{
{ "aaa", 2 },
{ "bbb", 2 }
};
var newDict = dict1.Except(dict2);
newDict
现在包含{ “AAA”,1}这是我所期望的,因为价值是不同的。
我的问题是,我们需要字典中的附加值,因此我们将Dictionary<string, int>
更改为Dictionary<string, MyObject>
。当我现在使用except
时,我没有得到我想要的结果。例如:
public class MyObject
{
public MyObject(string name, int someNumber)
{
myString = name;
myInt = someNumber;
}
public string myString { get; set; }
public int myInt { get; set; }
}
class Program
{
static void Main(string[] args)
{
Dictionary<string, MyObject> dict1 = new Dictionary<string, MyObject>
{
{ "aaa", new MyObject("abc", 1) },
{ "bbb", new MyObject("def", 2) }
};
Dictionary<string, MyObject> dict2 = new Dictionary<string, MyObject>
{
{ "aaa", new MyObject("abc", 2) },
{ "bbb", new MyObject("def", 2) }
};
var newDict = dict1.Except(dict2);
}
}
newDict
现在包含dict1所有KVP,但其实我只希望有从dict1中的第一项。我认为这是因为MyObject的值没有被比较。我能做些什么来解决这个问题? Linq有没有简单的方法?
在此先感谢!
'KeyValuePair'使用['ValueType.Equals'](https://msdn.microsoft.com/en-us/library/2dts52z7(v = vs.110).aspx)来比较两个字典项目。如果'TKey'和'TValue'是值类型,那么这是有效的。如果两者中的一个都是引用类型,则两者必须是相同的引用,否则'Equals'返回'false'。既然你有两个不同的实例('new MyObject ...'),它们是不相等的。 –
覆盖'MyObject'中的'Equals' +'GetHashCode' –