错误“提供的类型必须为枚举。参数名称:enumType”

时间:2019-06-18 15:31:13

标签: c# asp.net

这是我的代码-

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();
    }

语言课-

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"

我发现通常的解决方法是强制返回,我正在(Language[])进行操作,但是仍然出现此错误。我还可以如何修复此功能?

1 个答案:

答案 0 :(得分:0)

您尚未定义enum。您已经定义了一个自定义类,该类具有一些静态属性,例如通过定义enum使它看起来像{em> Language.English

要做我想做的事情(列举所有预定义的Language),您需要使用反射而不是调用Language来获取类型为Enum.GetValues的所有静态属性。

(未经测试)

typeof(Language).GetProperties(BindingFlags.Static | BindingFlags.Public)
    .Where(f => f.PropertyType == typeof(Language))