我目前有以下代码:
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扩展,这样就可以了?
答案 0 :(得分:8)
你可以写:
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
}
}
我不确定我会但是......因为你以不一致的方式重载object.Equals
。所以,如果有人写道:
object field = FieldType.Int;
Console.WriteLine(field.Equals(DataType.Int));
将打印False,因为它将使用object.Equals
而不是扩展方法。
答案 1 :(得分:0)
正如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();
}
}