我有以下内容:
public static class CityStatusExt
{
public static string D2(this CityStatus key)
{
return ((int) key).ToString("D2");
}
public static class CityTypeExt
{
public static string D2(this CityType key)
{
return ((int) key).ToString("D2");
}
加上具有类似扩展名的其他类,返回格式为“D2”的键
有没有办法可以从基类继承并让基类提供这样的功能 我不必重复相同的扩展方法代码吗?
更新。很抱歉我没有提到这个,但像CityType这样的课程是Enums。
答案 0 :(得分:6)
您可以使该方法通用。 C#将推断出类型:
public static class Extension
{
public static string D2<T> (this T key)
{
return ((int)(object) key).ToString("D2");
}
}
答案 1 :(得分:4)
从下面的评论中,CityType
和CityStatus
是枚举。因此,你可以这样做:
public static class Extensions
{
public static string D2(this Enum key)
{
return Convert.ToInt32(key).ToString("D2");
}
}
原始答案:
您可以使用通用方法和界面ID2Able
:
public static class Extensions
{
public static string D2<T>(this T key) where T : ID2Able
{
return ((int) key).ToString("D2");
}
}
这样,扩展方法不会出现绝对的每种类型;它只适用于您从{。}}继承的内容。
答案 2 :(得分:1)
您的枚举已经都继承自公共基类,即System.Enum
。所以你可以这样做(Enums不接受“D2”作为格式字符串,但是他们接受“D”,所以我添加了对PadLeft的调用):
public static class EnumExtensions
{
public static string D2(this Enum e)
{
return e.ToString("D").PadLeft(2, '0');
}
}