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 に答える