目前我有一个CompanyModel
,看起来是这样的;
public class CompanyModel
{
public string CompanyID { get; set; }
public string CompanyName { get; set; }
public string CompanyAddr1 { get; set; }
public string CompanyAddr2 { get; set; }
public string CompanyTown { get; set; }
public string CompanyCounty { get; set; }
public string CompanyPcode { get; set; }
public string CompanyTelephone { get; set; }
public string CompanyAltTelephone { get; set; }
public string CompanyFax { get; set; }
public string CompanyEmail { get; set; }
public string CompanyWhoEntered { get; set; }
public DateTime CompanyDateEntered { get; set; }
public string CompanyTimeEntered { get; set; }
public string CompanyGeographicArea { get; set; }
public string CompanySearchName { get; set; }
}
我想做的是初始化两个CompanyModels
,并比较两者的内容,以确保两家公司的字段中的数据完全相同。目前,我正在做一个绝对可怕的If
语句串联,因为我不确定另一种方式。目前看来是这样;
if (eCDetails.CompanyName == cCompanyDetails.CompanyName)
{
if (eCDetails.CompanyName == cCompanyDetails.CompanyName)
{
if (eCDetails.CompanyAddr1 == cCompanyDetails.CompanyName)
{
等等(太可怕了)。是否有更简单的方法来确保两个CompanyModels
是等效的?
使用条件AND(&&
)运算符怎么样?
if (eCDetails.CompanyName == cCompanyDetails.CompanyName &&
eCDetails.CompanyName == cCompanyDetails.CompanyName &&
eCDetails.CompanyAddr1 == cCompanyDetails.CompanyName &&
// etc...
如果你有ReSharper,你可以用它为你自动生成这个代码(以及更多)。
您正在尝试编写一个equals方法?
你可以做这样的东西:
if (eCDetails.CompanyName != cCompanyDetails.CompanyName)
{ return false;
}
if (eCDetails.CompanyName != cCompanyDetails.CompanyName)
{return false;
}
...
return true;
没有太多选择可以做你想做的事:)
试试这个。。你也必须忽略一些属性
public static bool PublicInstancePropertiesEqual<T>(this T self, T to, params string[] ignore) where T : class
{
if (self != null && to != null)
{
var type = typeof(T);
var ignoreList = new List<string>(ignore);
var unequalProperties =
from pi in type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
where !ignoreList.Contains(pi.Name)
let selfValue = type.GetProperty(pi.Name).GetValue(self, null)
let toValue = type.GetProperty(pi.Name).GetValue(to, null)
where selfValue != toValue && (selfValue == null || !selfValue.Equals(toValue))
select selfValue;
return !unequalProperties.Any();
}
return self == to;
}
起始螺纹
快乐编码
您也可以在模型类上实现Equals
class CompanyModel{
public override bool Equals(object other) {
var m = (CompanyModel) other;
if (m == null) return false;
return this.CompanyName == m.CompanyName &&
this.CompanyName == m.CompanyName &&
this.CompanyAddr1 == m.CompanyAddr1 // ...
}
}
现在您可以使用myModelInstance.Equals(anotherInstance)
了。