【发布时间】:2017-07-07 04:37:02
【问题描述】:
假设我有这些对象
var address = new Address("5455 Apache Trail", "Queen Creek", "AZ", "85243");
var person = new Person("Jane", "Smith", address);
我想通过字典检查那些对象的相等性,所以它就像这样
var dictionary = new Dictionary<object>{ [address] = address, [person] = person};
Assert.IsTrue(dictionary.ContainsKey(new Address("5455 Apache Trail", "Queen Creek", "AZ", "85243")));
Assert.IsTrue(dictionary.ContainsKey(new Person("Jane", "Smith", address)));
但是,它总是返回 False。我在这里缺少什么?
编辑
添加自定义词典
public class Dictionary<T> : Dictionary<T, T> where T : class, new()
{
}
添加类
public abstract class BaseModel
{
public string Id { get; set; }
public BaseModel()
{
}
}
public class Address : BaseModel
{
public string Street { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
public Address() { }
public override bool Equals(object value)
{
if (value == null)
return false;
Address mod = value as Address;
return (mod != null)
&& (Street == mod.Street)
&& (City == mod.City)
&& (PostalCode == mod.PostalCode)
&& (State == mod.State);
}
public override int GetHashCode(){
return base.GetHashCode();
}
public Address(string street, string city, string state, string postalCode) {
this.Street = street;
this.City = city;
this.State = state;
this.PostalCode = postalCode;
}
}
public class Person : BaseModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public Address Address { get; set; }
public Person() { }
public Person(string firstName, string lastName, Address address)
{
this.FirstName = firstName;
this.LastName = lastName;
this.Address = address;
}
public override bool Equals(object value)
{
if (value == null)
return false;
Person mod = value as Person;
return (mod != null)
&& (FirstName == mod.FirstName)
&& (LastName == mod.LastName)
&& (Address.Equals(mod.Address));
}
public override int GetHashCode(){
return base.GetHashCode();
}
}
【问题讨论】:
-
@DavidL 这在 C# 6 中运行良好,我也更新了我的问题以拥有一个自定义字典
标签: c# asp.net dictionary