作者:手机用户2602933827 | 来源:互联网 | 2022-12-06 13:18
最近对C#进行了一些更新,这意味着您可以将其Enum
用作泛型类型约束,并且我正在尝试利用这一新功能来制作一些适用于所有枚举的扩展方法.
像这样的东西:
public static class EnumToSequenceExtension
{
public static IEnumerable ToSequence(this T e)
where T : Enum
{
foreach (T value in Enum.GetValues(e.GetType()))
{
yield return value;
}
}
}
接下来是我如何使用这种方法,它现在不能编译,它试图用伪代码描述我想要实现的东西;
IEnumerable sequence = TestEnum.ToSequence();
TestEnum
我所拥有的枚举类型在哪里,例如
public enum TestEnum { Hello, World }
我正在寻找一些简单易用的代码,它具有"流畅"的感觉,我的意思是"读得很好".
1> angry person..:
不,你不能这样做,不能TestEnum
只是一个枚举类型,因为你不能用成员扩展它们.
既然TestEnum
不是实例,并且您只能为实例而不是类型创建扩展方法,则无法TestEnum.ToSequence()
进行编译.
因此,您可以获得的最佳方法是手动调用该方法,而不是作为扩展方法.
现在,正如@Bagdan Gilevich在评论中提到的,这应该编译:
TestEnum.SomeEnumItem.ToSequence()
我会把意见放在一边,如果这是可以接受的,你将不得不自己决定.
C#8(或更高版本)还有一个语言功能建议,称为Extension Everything.这可能会给你你想要的东西,但我们必须看看它会发生什么.