Asp.net mvc 结合可拓方法

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

我正在尝试编写两个扩展方法来处理枚举类型。一种方法是使用description属性更好地解释枚举选项,另一种方法是列出要在selectlist或某种集合中使用的枚举选项及其说明

到目前为止,您可以在此处阅读我的代码:

    <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枚举部分。