所以我创建了一个像这样的类:
public class ClassName
{
public int ID;
public String n_1 {get; set; }
public String n_2 {get; set; }
// ....
public String n_x {get; set; }
}
稍后在我的代码中,我比较了2个ClassName
对象:
ClassName Item_1 /*...*/ ;
ClassName Item_2 /*...*/ ;
赞:
if (Item_1 != Item_2 && Item_1.n_a == Item_2.n_a)
{
//do something
}
现在,我的问题是Item_1.ID
和Item_2.ID
应该被忽略。有没有简单的方法可以做到这一点?我想出的唯一解决方案是“不费吹灰之力”
if ( (Item_1.n_1 != Item_2.n_1 || Item_1.n_2 != Item_2.n_2 || /* ... */ ) && Item_1.n_a == Item_2.n_a)
答案 0 :(得分:1)
重写类中的object.Equals方法,并指定希望如何比较它。
然后使用!Item1.Equals(Item2)
代替!=
https://docs.microsoft.com/en-us/dotnet/api/system.object.equals?view=netframework-4.7.2
答案 1 :(得分:1)
简单的方法就是您实际在做什么,只需创建一个这样的方法
public bool Method(ClassName Item_1,ClassName Item2)
{
bool check=false;
if ( (Item_1.n_1 != Item_2.n_1 || Item_1.n_2 != Item_2.n_2 || /* ... */ ) && Item_1.n_a == Item_2.n_a)
check=true
return check
}
答案 2 :(得分:1)
要执行类似Item_1 != Item_2
或Item_1 == Item_2
的操作并获取所有要比较的属性(或所需属性),您需要实现自己的Equals
方法和{{1} },==
运算符重载。
!=
运算符,来自 MSDN :
对于不是字符串的引用类型,如果==的两个操作数引用同一对象,则==返回true。
为此,您可以从一些简单的解决方案开始,以实现==
接口,在IEquatable<T>
方法内部填充比较逻辑,并在内部重载Equals
和==
运算符类型安全的!=
方法:
Equals
然后您可以签入public class ClassName : IEquatable<ClassName>
{
public int ID;
public String n_1 { get; set; }
public String n_2 { get; set; }
// ....
public String n_x { get; set; }
public static bool operator ==(ClassName obj1, ClassName obj2)
{
if (((object)obj1) == null || ((object)obj2) == null)
return Equals(obj1, obj2);
return obj1.Equals(obj2);
}
public static bool operator != (ClassName obj1, ClassName obj2)
{
if (((object)obj1) == null || ((object)obj2) == null)
return !Equals(obj1, obj2);
return !obj1.Equals(obj2);
}
public bool Equals(ClassName obj)
{
if (obj == null) return false;
return (n_1 == obj.n_1) && (n_2 == obj.n_2) && (n_x == obj.n_x); //you can ignore ID here
}
public override bool Equals(object obj)
{
if (obj == null)
return false;
ClassName classNameObj = obj as ClassName;
if (classNameObj == null)
return false;
else
return Equals(classNameObj);
}
public override int GetHashCode()
{
//This code was generated by VS ide, you can write your own hashing logic
var hashCode = 1032198799;
hashCode = hashCode * -1521134295 + ID.GetHashCode();
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(n_1);
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(n_2);
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(n_x);
return hashCode;
}
}
:
if
对于if (Item_1 != Item_2)
{
//Do Something
}
方法,您应该坚持 Guidelines for Overriding Equals() and Operator == 。
参考: == Operator , != Operator , IEquatable Interface , {{3 }} , IEquatable.Equals(T) Method