我有一个类,用于指定像这样的类型
public class TypeSpec
{
public int? maxLength {get; set;} = null;
public int? minLength {get; set;} = null;
public int? maxInteger {get; set;} = null;
public int? minInteger {get; set;} = null;
}
TypeSpec typeA = new TypeSpec()
{
maxLength = 10;
minLength = 0;
}
TypeSpec typeB = new TypeSpec()
{
maxLength = 10;
minLength = 5;
maxInteger = 0;
}
如何检查TypeB
是否仍将MaxInteger作为null
,并触发false,以确保此处更改的值只是从0-10到5-10的maxLength和MinLength?
比较它们,例如typeB == typeA
将输出false,因为它们不相同?
在这个问题上也不是很清楚。在typeB.maxInteger
为null
时返回false的简单版本如下所示:var result = typeB.maxInteger.HasValue ? true : false;
尽管您似乎试图实现一些自定义对象相等性检查,所以您需要看一下实现IEquatable
和相关的重载:
public class TypeSpec : IEquatable<TypeSpec>
{
public int? maxLength { get; set; } = null;
public int? minLength { get; set; } = null;
public int? maxInteger { get; set; } = null;
public int? minInteger { get; set; } = null;
public static bool operator ==(TypeSpec a, TypeSpec b)
=> a.Equals(b);
public static bool operator !=(TypeSpec a, TypeSpec b)
=> !a.Equals(b);
public bool Equals(TypeSpec other)
{
var result = GetHashCode() == other.GetHashCode();
return result;
}
public override bool Equals(object obj)
{
return this == obj as TypeSpec;
}
public override int GetHashCode()
{
var maxI = maxInteger.HasValue ? maxInteger.Value : default;
var minI = minInteger.HasValue ? minInteger.Value : default;
var minL = minLength.HasValue ? minLength.Value : default;
var maxL = maxLength.HasValue ? maxLength.Value : default;
var result = (maxI + minI + minL + maxL).GetHashCode();
return result;
}
}
public class Program
{
public static void Main()
{
TypeSpec typeA = new TypeSpec()
{
maxLength = 10,
minLength = 0
};
TypeSpec typeB = new TypeSpec()
{
maxLength = 10,
minLength = 0,
maxInteger = null
};
var result = typeB == typeA;
}
}
我想您想比较typeA和typeB的属性值。有几种方法。最简单的是比较每个属性。如果typeA.MaxInt为null,而typeB.MaxInt为null,则typeA.MaxInt == typeB.MaxInt将为您提供true。