C# “错误”;提供的类型必须是枚举。参数名称:enumType";

C# “错误”;提供的类型必须是枚举。参数名称:enumType";,c#,asp.net,C#,Asp.net,这是我的密码- private List<LanguageResource> GetAll() { return ((Language[])Enum.GetValues(typeof (Language))) .Select(l => new LanguageResource {

这是我的密码-

private List<LanguageResource> GetAll()
    {
        return ((Language[])Enum.GetValues(typeof (Language)))
                                .Select(l => new LanguageResource
                                                {
                                                    Id = (int) l,
                                                    Name = l.ToString()
                                                })
                                .OrderBy(l => l.Name)
                                .ToList();
    }

我发现的常见修复方法是强制执行返回,我正在执行
(Language[])
,但是我仍然会遇到此错误。。如何修复此函数?

您尚未定义
枚举。例如,通过定义
Language.English
,您定义了一个自定义类,该类具有一些静态属性,使其看起来像
enum

要执行我认为需要的操作(枚举所有预定义的
Language
s),您需要使用反射来获取
Language
类型的所有静态属性,而不是调用
Enum.GetValues

类似于(未经测试)


Enum.GetValues
需要一个枚举,
Language
不是枚举吗?我建议您,这似乎是在尝试在不使用任何枚举的情况下创建自己的
enum
实现。非常奇怪。请阅读Jimmy Bogard关于enum类的文章:@DavidG谢谢-我一直将它们视为字段,因此我忽略了它们是属性。
public class Language : IEmbeddedDocument, IEquatable<Language>
{
    public int Id { get; set; }
    public string Name { get; set; }

    public Language()
    {
    }

    private Language(int id, string name)
    {
        Id = id;
        Name = name;
    }

    public static Language Unknown      { get { return new Language(0, "Unknown"); } }
    public static Language English      { get { return new Language(1, "English"); } }
    public static Language French       { get { return new Language(2, "French"); } }
    public static Language Spanish      { get { return new Language(3, "Spanish"); } }

}
"Type provided must be an Enum. Parameter name: enumType"
typeof(Language).GetProperties(BindingFlags.Static | BindingFlags.Public)
    .Where(f => f.PropertyType == typeof(Language))