C# 是否可以为泛型枚举类型编写扩展方法?

C# 是否可以为泛型枚举类型编写扩展方法?,c#,generics,enums,C#,Generics,Enums,最后,我发现了一个非常好的助手方法,可以将字符串解析为通用枚举值: public static T ParseEnum<T>(string value) { return (T) Enum.Parse(typeof(T), value, true); } 我也试过这个,但这个也不行: public static Enum ParseEnum(this Enum myEnum, string value) { return Enum.Parse(typeof(myEn

最后,我发现了一个非常好的助手方法,可以将字符串解析为通用枚举值:

public static T ParseEnum<T>(string value)
{
    return (T) Enum.Parse(typeof(T), value, true);
}
我也试过这个,但这个也不行:

public static Enum ParseEnum(this Enum myEnum, string value)
{
    return Enum.Parse(typeof(myEnum), value, true);
}

甚至可以实现我在这里所要求的吗?

在编写扩展方法时,您需要做的第一件事是确定如何调用它。也就是说,你在扩展什么

在解析
字符串
并返回
枚举
值的情况下,唯一有意义的是扩展
字符串
类。在该视图中,这就是扩展方法的外观:

    public static T ParseEnum<T>(this string text)
    {
        return (T)Enum.Parse(typeof(T), text);
    }
尽管您得到了类型推断,但这并没有那么好,因为您不能在表达式中使用方法调用


请注意,语法
Pets.ParseEnum(“Cat”)
不起作用,因为
Pets
是一个类型名称,而不是一个类型实例,并且只能基于对象的实例进行扩展。但是,也许上面的例子已经足够接近了(反正输入的字符数是一样的:)

在编写扩展方法时,首先要做的是确定如何调用它。也就是说,你在扩展什么

在解析
字符串
并返回
枚举
值的情况下,唯一有意义的是扩展
字符串
类。在该视图中,这就是扩展方法的外观:

    public static T ParseEnum<T>(this string text)
    {
        return (T)Enum.Parse(typeof(T), text);
    }
尽管您得到了类型推断,但这并没有那么好,因为您不能在表达式中使用方法调用


请注意,语法
Pets.ParseEnum(“Cat”)
不起作用,因为
Pets
是一个类型名称,而不是一个类型实例,并且只能基于对象的实例进行扩展。但是,也许上面的示例已经足够接近了(无论如何键入的字符数都差不多:)

您可以将助手方法重命名为Enum,使其看起来像是在扩展Enum

/// <summary> Enum Extension Methods </summary>
/// <typeparam name="T"> type of Enum </typeparam>
public class Enum<T> where T : struct, IConvertible
{
    public static T Parse(string input)
    {
        return (T)Enum.Parse(typeof(T), input, true);
    }
}
///枚举扩展方法
///枚举类型
公共类枚举,其中T:struct,IConvertible
{
公共静态T解析(字符串输入)
{
返回(T)Enum.Parse(typeof(T),输入,true);
}
}
然后使用与OP提到的助手方法相同的方法:

var result = Enum<StatusEnum>.Parse("Active");
var result=Enum.Parse(“活动”);

这不是一个扩展方法。然而,它与扩展方法的目标之一相同。命名接近Enum的类会尝试帮助发现。

您可以将助手方法重命名为Enum,使其看起来像是在扩展Enum

/// <summary> Enum Extension Methods </summary>
/// <typeparam name="T"> type of Enum </typeparam>
public class Enum<T> where T : struct, IConvertible
{
    public static T Parse(string input)
    {
        return (T)Enum.Parse(typeof(T), input, true);
    }
}
///枚举扩展方法
///枚举类型
公共类枚举,其中T:struct,IConvertible
{
公共静态T解析(字符串输入)
{
返回(T)Enum.Parse(typeof(T),输入,true);
}
}
然后使用与OP提到的助手方法相同的方法:

var result = Enum<StatusEnum>.Parse("Active");
var result=Enum.Parse(“活动”);

这不是一个扩展方法。然而,它与扩展方法的目标之一相同。命名接近Enum的类会尝试帮助发现性。

如果您想要Enum类型的扩展方法而不是Enum的实例,那就好了。如果您想要Enum类型的扩展方法而不是Enum的实例,那就好了。感谢您给出这样一个完整的答案!感谢所有回答的人。今天我确实学到了一些新东西谢谢你这么彻底的回答!感谢所有回答的人。今天我确实学到了一些新东西
var result = Enum<StatusEnum>.Parse("Active");