11

我有以下内容:

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 是枚举。

4

3 回答 3

6

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

public static class Extension 
{ 
    public static string D2<T> (this T key) 
    { 
        return ((int)(object) key).ToString("D2"); 
    } 
}
于 2012-10-24T06:15:07.450 回答
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"); 
    } 
}

这样扩展方法就不会出现在所有类型中;它仅适用于您继承的东西ID2Able

于 2012-10-24T06:18:00.183 回答
1

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

public static class EnumExtensions
{
    public static string D2(this Enum e)
    {
        return e.ToString("D").PadLeft(2, '0');
    }
}
于 2012-10-24T06:30:31.727 回答