我可以使用扩展方法inheritance吗?

我有以下内容:

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”的键

有没有一种方法可以从基类inheritance并让基类提供function所以我不必重复相同的扩展方法代码?

更新。 对不起,我没有提到这个,但像CityType这样的课程是Enums。

从下面的评论中, CityTypeCityStatus是枚举。 因此你可以这样做:

 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(this T key) where T : ID2Able { return ((int) key).ToString("D2"); } } 

这样,扩展方法不会出现绝对的每种类型; 它只适用于你inheritanceID2Able东西。

您可以使方法通用。 C#将推断出类型:

 public static class Extension { public static string D2 (this T key) { return ((int)(object) key).ToString("D2"); } } 

您的枚举已经全部inheritance自公共基类,即System.Enum 。 所以你可以这样做(Enums不接受“D2”作为格式字符串,但是他们接受“D”,所以我添加了对PadLeft的调用):

 public static class EnumExtensions { public static string D2(this Enum e) { return e.ToString("D").PadLeft(2, '0'); } }