Enum对象的C#extend方法

时间:2015-12-15 19:12:59

标签: c#

我正在尝试创建一个扩展方法但无法使其工作。

这样可行,在枚举类型上创建扩展方法:

Int

以上宠物可以扩展,创建一个扩展方法,如:

AnyVal

但是当我尝试扩展以下的Enum本身时:

public enum Pets
{
    ....
}

并尝试使用它,如下所示

public static void Myex(this Pets pet)
{
    ... 
} 

这不起作用。

我试图创建类似Enum.Parse,Enum.IsDefined(已经通过c#公开)的类似方法。

3 个答案:

答案 0 :(得分:10)

这与Pets.SomeValue.something() 本身无关 - 但是扩展方法"看起来"喜欢他们的&#em>实例方法。你不能假装"添加静态方法,因为它看起来像你当前正在尝试做的那样。

你可以这样做:

{{1}}

...因为他们在"实例"上调用了扩展方法(一个值)。请注意,它最终会撼动价值。

答案 1 :(得分:3)

Enum是一个类型名称。例如,您应该使用扩展方法。下一代码工作正常:

0 0 4
3 0 0
2 3 0

答案 2 :(得分:1)

Extension methods非常强大有趣。为了正确创建扩展方法,您需要有一个非嵌套的静态类,然后公开一个静态方法。静态方法的第一个参数必须包含您要扩展的类型的this关键字。例如,如果您想要专门扩展Pets enum,那么您需要有一个扩展方法正确指定参数的扩展名,同样用于定位Enum。见下文:

public class Program
{
    static void Main()
    {
        Console.WriteLine("Grizzlies live in water = " + Pets.NorthAmericanGrizzly.LivesInWater());
        Console.WriteLine("Fish live in water = " + Pets.Fish.LivesInWater());
        Console.WriteLine("Cat is a pet enum = " + Pets.Cat.IsPetEnum());
        Console.WriteLine("Date Time Kind of UTC is a pet enum = " + DateTimeKind.Utc.IsPetEnum());

        Console.ReadLine();
    }
}

public enum Pets
{
    Dog,
    Cat,
    Fish,
    Shark,
    NorthAmericanGrizzly
}

public static class PetExtensions
{
    public static bool LivesInWater(this Pets pet)
    {
        return pet == Pets.Fish || pet == Pets.Shark;
    }
}

public static class EnumExtensions
{
    public static bool IsPetEnum(this Enum @enum)
    {
        return @enum is Pets;
    }
}

这是输出:

Grizzlies live in water = False
Fish live in water = True
Cat is a pet enum = True
Date Time Kind of UTC is a pet enum = False