我正在尝试比较 2 支画笔,如您在图片中所见。我不知道为什么它会失败......
最佳答案
它们不会相等,因为它正在进行引用比较,并且它们是堆中具有相同属性的两个不同引用。
如果你想控制对象比较,你应该实现IEqualtable
接口(interface)。然后你可以说出必须如何比较对象。然而,在这种情况下,由于 SolidColorBrush
是一个 .NET 类,我们无法实现 IEquatable
。有不同的选择
1) 在 SolidColorBrush
上使用扩展方法,将画笔实例与另一个进行比较。虽然在这种情况下不是一个很好的解决方案。
2) 最好的办法可能是使用 IEqualityComparer
接口(interface)。您创建一个单独的类来实现 IEqualityComparer
,它将定义如何比较 2 个不同的对象。例如,在您的示例中,您可能想要比较 SolidColorBrush 的颜色和不透明度:
public class SolidColorBrushComparer : IEqualityComparer<SolidColorBrush>
{
public bool Equals(SolidColorBrush x, SolidColorBrush y)
{
return x.Color == y.Color &&
x.Opacity == y.Opacity;
}
public int GetHashCode(SolidColorBrush obj)
{
return new { C = obj.Color, O = obj.Opacity }.GetHashCode();
}
}
然后比较您只需执行以下操作:
SolidColorBrush otherBrush = (SolidColorBrush)(new BrushConverter().ConvertFrom("#FFEFEEEE"));
SolidColorBrush backgroundBrush = (SolidColorBrush)grd.Background;
if(new SolidColorBrushComparer().Equals(backgroundBrush, otherBrush))
{
// They're equal, Yay!
}
关于c# - 如何比较 SolidColorBrushes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28105339/