传递枚举作为参数

时间:2013-01-21 08:57:48

标签: c# .net asp.net-mvc-4

我有这个方法,

private List<SelectListItem> GetList()
{
    var values = from LtlAccountType item in 
                 Enum.GetValues(typeof(LtlAccountType))
                 select new SelectListItem 
                 { Text = item.ToString(), Value = item.ToString() };
    return values.ToList();
}

如何enum作为parameter传递并在查询enum

后返回列表
private List<SelectListItem> GetList(Enum obj)
{
    var values = from obj item in Enum.GetValues(typeof(obj))
                 select new SelectListItem 
                 { Text = item.ToString(), Value = item.ToString() };
    return values.ToList();
}

我在obj

上收到此错误

Type or namespace name expected

3 个答案:

答案 0 :(得分:1)

我刚试过这个并且它有效:

private static List<SelectListItem> GetList(Enum item)
{
    var values = from Enum e in Enum.GetValues(item.GetType())
                 select new SelectListItem { Text = e.ToString(), Value = e.ToString() };
    return values.ToList();
}

答案 1 :(得分:1)

<强>更新

Starting from C# 7.3您可以使用System.Enum作为类型约束。


您应该致电GetType()而不是typeof()。此外,您不能将Enum用作任何枚举的基类。最好的解决方案是使用struct ...

private List<SelectListItem> GetList<T>(T obj) where T : struct
{
    var values = from Enum item in Enum.GetValues(obj.GetType())
                 select new SelectListItem { Text = item.ToString(), Value = item.ToString() };
    return values.ToList();
}

答案 2 :(得分:1)

那是因为obj不是.NET中的有效类型标识符。你为什么不做一个简单的

List<SelectedListItem> result = new List<SelectedListItem>();
foreach (var item in Enum.GetValues(typeof(obj)))
   result.Add(new SelectedListItem() { Text = item.ToString(), Value = item.ToStringt() }

return result;