我正在尝试创建一个扩展方法但无法使其工作。
这样可行,在枚举类型上创建扩展方法:
Int
以上宠物可以扩展,创建一个扩展方法,如:
AnyVal
但是当我尝试扩展以下的Enum本身时:
public enum Pets
{
....
}
并尝试使用它,如下所示
public static void Myex(this Pets pet)
{
...
}
这不起作用。
我试图创建类似Enum.Parse,Enum.IsDefined(已经通过c#公开)的类似方法。
答案 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