using System.Threading.Tasks;
public override bool Equals(object obj)
if (!(obj is PS details))
&& (anEnum == details.anEnum);
public override int GetHashCode()
var hashCode = i.GetHashCode();
hashCode = (hashCode * 397) ^ anEnum.GetHashCode();
public static bool operator ==(PS lhs, PS rhs)
return (object)rhs == null;
public static bool operator !=(PS lhs, PS rhs)
return (object)rhs != null;
return !(lhs.Equals(rhs));
public static void Main()
PS sub = new PS(){i = 10, anEnum = MyEnum.FirstMem};
PS sub2 = new PS(){i = 10, anEnum = MyEnum.FirstMem};
bool equal = sub == sub2 ;
Console.WriteLine($"Are sub and sub2 equal : {equal}");
Console.WriteLine($"Are sub: {sub.anEnum.GetHashCode()}");
Console.WriteLine($"Are sub2 : {sub2.anEnum.GetHashCode()}");