为多个值相等重载写一个包装函数

时间:2018-03-21 14:21:25

标签: c#

我正在尝试为我的类型实现值相等,但我已经意识到我可以在接口级别上执行此操作,通过为我想要相等的所有接口实现以下函数。

class EqHelper 
{
    public static bool Eq(I1 x, I1 y) { ... }
    public static bool Eq(I2 x, I2 y) { ... }
    public static bool Eq(I3 x, I3 y) { ... }
}

I1I2I3等是接口,而不是类。我已经在接口上实现了值相等,因为我可以从任何实现类中调用静态EqHelper.Eq方法并获得值相等。

但我意识到上述功能不会检查null

所以我尝试了以下内容:

class EqHelper
{
    public static bool Eq<T>(T x, T y) 
    { 
        if (x != null && y != null) 
        {
            return EqWorker(x,y);
        } 
        else 
        {
            return (x == null) == (y == null);
        }
    }

    public static bool EqWorker(I1 x, I1 y) { ... }
    public static bool EqWorker(I2 x, I2 y) { ... }
    public static bool EqWorker(I3 x, I3 y) { ... }
}

但遗憾的是,此Eq现在无法编译,因为EqWorker当然不适用于所有T,只适用于特定的覆盖。

无论如何都能很好地做这个包装吗?我宁愿不把null逻辑放在每个类型的每个相等函数中,这似乎比现在更重复。

在相关的说明中,定义价值平等似乎与讨论in this Microsoft article有点相关。有没有比文章中建议更好的方法呢?

请注意,由于我正在进行的项目,我很遗憾地被C#5.NET 2.0困住了。如果确实需要,我可以偷偷溜到C#6,但我不愿意,由于WinXP的要求,我绝对不能超过.NET 2.0

我只编写了C#几周的代码,所以请告诉我,我是否做了一些完全愚蠢的事情。

0 个答案:

没有答案