Asp.net mvc 结合可拓方法
我正在尝试编写两个扩展方法来处理枚举类型。一种方法是使用description属性更好地解释枚举选项,另一种方法是列出要在selectlist或某种集合中使用的枚举选项及其说明 到目前为止,您可以在此处阅读我的代码:Asp.net mvc 结合可拓方法,asp.net-mvc,vb.net,enums,extension-methods,Asp.net Mvc,Vb.net,Enums,Extension Methods,我正在尝试编写两个扩展方法来处理枚举类型。一种方法是使用description属性更好地解释枚举选项,另一种方法是列出要在selectlist或某种集合中使用的枚举选项及其说明 到目前为止,您可以在此处阅读我的代码: <Extension()> _ Public Function ToDescriptionString(ByVal en As System.Enum) As String Dim type As Type = en.GetType
<Extension()> _
Public Function ToDescriptionString(ByVal en As System.Enum) As String
Dim type As Type = en.GetType
Dim entries() As String = en.ToString().Split(","c)
Dim description(entries.Length) As String
For i = 0 To entries.Length - 1
Dim fieldInfo = type.GetField(entries(i).Trim())
Dim attributes() = DirectCast(fieldInfo.GetCustomAttributes(GetType(DescriptionAttribute), False), DescriptionAttribute())
description(i) = If(attributes.Length > 0, attributes(0).Description, entries(i).Trim())
Next
Return String.Join(", ", description)
End Function
<Extension()> _
Public Function ToListFirstTry(ByVal en As System.Enum) As IEnumerable
Dim type As Type = en.GetType
Dim items = From item In System.Enum.GetValues(type) _
Select New With {.Value = item, .Text = item.ToDescriptionString}
Return items
End Function
<Extension()> _
Public Function ToListSecondTry(ByVal en As System.Enum) As IEnumerable
Dim list As New Dictionary(Of Integer, String)
Dim enumValues As Array = System.Enum.GetValues(en.GetType)
For Each value In enumValues
list.Add(value, value.ToDescriptionString)
Next
Return list
End Function
所以我的问题是两种扩展方法不能很好地协同工作。将枚举选项转换为ienumerable的方法无法使用扩展方法获取描述
我发现各种各样的例子都能做到两者中的一个,但从来没有把它们结合起来。我做错了什么?对于这些新的.NET 3.5内容,我仍然是新手。问题在于Enum.GetValues只返回弱类型数组
试试这个:
Public Function ToListFirstTry(ByVal en As System.Enum) As IEnumerable
Dim type As Type = en.GetType
Dim items = From item In System.Enum.GetValues(type).Cast(Of Enum)() _
Select New With {.Value = item, .Text = item.ToDescriptionString}
Return items
End Function
看起来VB查询中显式类型的范围变量的含义与C中的不同。我尝试过这样做,但后来出现了一个错误:Option Strict On不允许从“Object”到“System.Enum”的隐式转换。在As枚举部分。