首页 > 解决方案 > 如何在 C# 中制作针对枚举的扩展

问题描述

我正在尝试做一个针对枚举类型的扩展,但它似乎只适用于枚举中的项目,而不是整个枚举本身。

枚举

public enum Demo
{
    ValueOne,
    ValueTwo,
    ValueThree
}

扩展名

public static IEnumerable<TEnum> AsEnumerable<TEnum>(this TEnum source) where TEnum : Enum, IConvertible
{
    if (!typeof(TEnum).IsEnum)
    {
        throw new ArgumentException();
    }

    foreach(TEnum item in Enum.GetValues(typeof(TEnum)))
    {
        yield return item;
    }
}

这有效:

var demo = Demo.ValueOne.AsEnumerable();

但我正在寻找:

var demo = Demo.AsEnumerable();

我必须为此创建一个单独的方法,从而产生如下语法:

var test = EnumExtensionHelper<BaseAttributes>.AsEnumerable();

但是直接在对象上使用扩展方法会看起来和感觉更好

标签: c#genericsenumsextension-methodsienumerable

解决方案


感谢 madreflection 解决了。答案是

“您不能创建类型扩展方法,即向类型添加方法,就像您可以添加“实例”方法来扩展实例一样。扩展方法需要一个实例。” - 疯狂反思


推荐阅读