Visual studio 2010 比较两个对象的简单方法?
假设我有下面的课程Visual studio 2010 比较两个对象的简单方法?,visual-studio-2010,linq,c#-4.0,lambda,compare,Visual Studio 2010,Linq,C# 4.0,Lambda,Compare,假设我有下面的课程 public class Test { public int prop1 { get;set; } public string prop2 { get;set; } public Type prop3 { get;set; } } 如果我有这个类的两个实例,什么是比较对象的快速方法,但同时允许我检查一个属性是否是其他属性(假设它与其他对象属性不匹配)。目前我正在做大量的if语句,但这感觉像是一种糟糕的做事方式 我想要的功能示例;若第一个实例的prop
public class Test
{
public int prop1 { get;set; }
public string prop2 { get;set; }
public Type prop3 { get;set; }
}
如果我有这个类的两个实例,什么是比较对象的快速方法,但同时允许我检查一个属性是否是其他属性(假设它与其他对象属性不匹配)。目前我正在做大量的if语句,但这感觉像是一种糟糕的做事方式
我想要的功能示例;若第一个实例的prop1和第二个实例的prop1不匹配,我仍然可以检查第一个实例的prop1是否为10或其他值
是的,这个例子非常粗糙,但实际的代码是巨大的,所以我不可能在这里发布它
谢谢
编辑
我应该注意,我不能编辑类测试,因为我不拥有它。如果不能编辑类本身,我会说您的选项相当有限。您总是可以在某个地方抽象出代码,然后创建一个比较函数,该函数接受2个对象并返回bool
public static bool Compare(Test test1, Test test2)
{
//May need to add some null checks
return (test1.prop1 == test2.prop1)
&& (test1.prop2 == test2.prop2);
//...etc
}
除非您确实拥有相同的对象,而不仅仅是两个恰好具有相同属性值的对象,在这种情况下,您可以简单地执行
if (test1 == test2)
但我从你的问题中猜测情况并非如此。你可以构建自己的比较器(未经测试的代码)
也许这个链接会有帮助。。使用IEquatable接口
public class TestComparer : IEqualityComparer<Test>
{
public bool Equals( Test x, Test y )
{
if( ReferenceEquals( x, y ) )
return true;
if( ReferenceEquals( x, null ) || ReferenceEquals( y, null ) )
return false;
return x.prop1 == y.prop1 &&
x.prop2 == y.prop2 &&
x.prop3 == y.prop3;
}
public int GetHashCode( Test entry )
{
unchecked
{
int result = 37;
result *= 397;
result += entry.prop1.ToString( ).GetHashCode( );
result *= 397;
result += entry.prop2.GetHashCode( );
result *= 397;
result += entry.prop3.ToString( ).GetHashCode( );
return result;
}
}
}
Test a = new Test( );
Test b = new Test( );
var equal = new TestComparer( ).Equals( a, b );