2011-12-28 3 views
1

У меня возникла следующая проблема. Недавно я активировал «Option Strict On», и теперь я получаю сообщение об ошибке в моем запросе LINQ. From e As TEnum возвращает следующее сообщение об ошибке:Опция Strict On LINQ VB.NET проблема

Option Strict On disallows implicit conversions from 'Object' to 'TEnum'

Кто-нибудь знает, как решить эту проблему?

Public Module SelectItemPandEnumExtension 
     <System.Runtime.CompilerServices.Extension()> _ 
     Public Function ToSelectListEnum(Of TEnum)(enumObj As TEnum) As SelectList 
      Dim values = From e As TEnum In [Enum].GetValues(GetType(TEnum)) 
         Select New With {.Id = e, .Name = e.ToString()} 

      Return New SelectList(CType(values, Collections.IEnumerable), "Id", "Name", enumObj) 
     End Function 
    End Module 
+0

Уже найдено решение, пришлось удалить 'As TEnum' – Micclo

+0

Congrats, теперь вы можете добавить его в список ответов на ваш вопрос и отметить его как "принятый". :-) – Prutswonder

ответ

0

[Enum].GetValues возвращает Object(), но вы должны быть в состоянии иметь временный строго типизированный список:

<System.Runtime.CompilerServices.Extension()> _ 
Public Function ToSelectListEnum(Of TEnum)(enumObj As TEnum) As SelectList 
    Dim values = From e As TEnum In New List(of TEnum)([Enum].GetValues(GetType(TEnum))) 
        Select New With {.Id = e, .Name = e.ToString()} 

    Return New SelectList(CType(values, Collections.IEnumerable), "Id", "Name", enumObj) 
End Function 
1

Я думаю, что вы хотите:

Dim values As IEnumerable = From e As TEnum In CType([Enum].GetValues(GetType(TEnum)), TEnum()) 
       Select New With {.Id = e, .Name = e.ToString()} 

    Return New SelectList(values, "Id", "Name", enumObj) 

The GetValues ​​возвращает объект(), но вам также необходимо определить тип значений. Это означает, что вам не придется ссылаться на него при создании списка выбора. (Ну, предположим, что у вас также есть опция вывода)