如何添加.枚举的Equals()扩展

本文关键字:扩展 Equals 枚举 添加 何添加 | 更新日期: 2023-09-27 18:00:48

我目前有以下代码:

public enum FieldType
{
    Int,
    Year,
    String,
    DateTime
}
public enum DataType
{
    Int,
    String,
    DateTime
}

我希望每个都有一个扩展方法,这样我就可以做这样的事情:

FieldType fType = FieldType.Year;
DataType dType = DataType.Int;
fType.Equals(dType); //If fType is an Int/Year, and dType is an Int it should return true
dType.Equals(fType); //If dType is an Int, and fType is an Int/Year it should be true

有没有办法创建。等于扩展,这样就可以了?

如何添加.枚举的Equals()扩展

可以写:

public static class Extensions
{
    public static bool Equals(this FieldType field, DataType data)
    {
        return data.Equals(field);
    }
    public static bool Equals(this DataType data, FieldType field)
    {
        // Insert logic here
    }
}

不过,我不确定我是否会。。。因为您正在以不一致的方式重载CCD_ 1。所以如果有人写:

object field = FieldType.Int;
Console.WriteLine(field.Equals(DataType.Int));

这将打印False,因为它将使用object.Equals而不是扩展方法。

正如Jon所说,重用框架的方法名不是一个好主意。

但你可以很容易地做这样的事情:

public static class Extensions
{
    public static bool IsEquivalentTo(this FieldType field, DataType data)
    {
        return data.ToString() == field.ToString();
    }
    public static bool IsEquivalentTo(this DataType data, FieldType field)
    {
        return data.ToString() == field.ToString();
    }
}

甚至更好:

public static class Extensions
{
    public static bool IsEquivalentTo(this Enum e1, Enum e2)
    {
        return e1.ToString() == e2.ToString();
    }
}