c# - 如何比较 SolidColorBrushes?

标签 c# wpf

我正在尝试比较 2 支画笔,如您在图片中所见。我不知道为什么它会失败......

Equal Fail

最佳答案

它们不会相等,因为它正在进行引用比较,并且它们是堆中具有相同属性的两个不同引用。

如果你想控制对象比较,你应该实现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/

相关文章:

c# - 当其构建操作设置为无时如何获取资源?

c# - 设置 ExclusionNestedObjects 时,FluentAssertions 导致 ObjectDisposeException

wpf - SWT 到 WPF 端口的状态是什么?

c# - 如何使用 INotifyPropertyChanged 更新列表框

c# - 计算贝塞尔曲线的中点

wpf - 可观察列表 Nhibernate

c# - 使用word interp计算word文档中的分页符

c# - c# Winforms 中的 Web 浏览器

c# - Fluent NHibernate映射: QuantLib.日期和Mysql的日期

c# - 从 Internet 下载大文件时,如何阻止 C# 应用程序的 UI 变得无响应