如何在C#中比较对象

时间:2012-02-16 22:30:39

标签: c#

如何比较C#中的对象。这是我的代码示例

namespace MyService
{
    public static class CurrentVCobj
    {
        public static string id { get; set; }
        public static string Month { get; set; }
        public static string Year { get; set; }
    }

    public static class ResponseVCObj
    {
        public static string id { get; set; }
        public static string Month { get; set; }
        public static string Year { get; set; }
    }
}

我想为上面的对象(CurrentVCobj和ResponseVCObj)赋值,然后在下面的方法中比较(TRUE或FALSE)它们是否相等

public static  void compareMethood(IEnumerable<tets> vc )
{             
    var myvar = vc;
    var mycac = rep.populateDict();

    foreach (var item in myvar)
    {
        ResponseVCObj.id = item.id;
        ResponseVCObj.Month = DateRange.Month;
        ResponseVCObj.Year = DateRange.Year;

        CurrentVCobj.id = currentV.Select(d => d.Value.id).ToString() ;
        CurrentVCobj.Month = currentV.Select(d => d.Value.Month).ToString();
        CurrentVCobj.Year = currentV.Select(d => d.Value.Year).ToString();

        //COMPARE OBJECTS HERE               
     }
}

3 个答案:

答案 0 :(得分:0)

试试这个:

if (ResponseVCObj.Equals(CurrentVCobj))
{
  ...
}
else
{
  ...
}

答案 1 :(得分:0)

首先,您是否有使用静态类的原因?您的示例代码对我来说似乎很奇怪。您对LINQ的使用似乎也是不必要的。

如果您想通过简单的引用检查以外的方式比较两个不同的对象,则需要覆盖Equals方法。

可在此处找到相关指南: http://msdn.microsoft.com/en-us/library/ms173147(v=vs.80).aspx

答案 2 :(得分:0)

其他答案是正确的,指出您应该覆盖object.Equals,并且应该从类及其成员中删除静态修饰符。

此外,你应该考虑

  • 让类继承自同一个接口
  • 让类继承自同一个基类;如果可以,那么您可以在该基类中实现相等比较
  • 在每个类或基类上实现IEquatable;如果没有共同的基本类型,那么您可能希望在每种类型上实施两次 - IEnumerable<CurrentVCobj>IEnumerable<ResponseVCObj>
  • 当你比较字符串的相等性时,结果可能因计算机而异,具体取决于该计算机上的文化设置。