2009-09-05 2 views
1

열거 형을 처리하기 위해 2 개의 확장 메서드를 작성하려고합니다. enum 옵션에 대한 설명을보다 잘 설명하기 위해 description 속성을 사용하는 방법과 selectlist 또는 어떤 종류의 콜렉션에서 사용할 enum 옵션과 설명을 나열하는 두 번째 방법이 있습니다.확장 메서드 결합

이제 여기까지 내 코드를 읽을 수 있습니다

<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 물건에 새로운 있습니다.

답변

2

Enum.GetValues은 약한 형식의 Array을 반환합니다. 그 일을

+0

내가 노력

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'으로의 암시 적 변환을 허용하지 않습니다." "열거 형으로"부분. –

+0

좋아요, 수정 중입니다 ... –