将一个模型类与另一个C#进行比较



目前我有一个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)了。

相关内容

最新更新