2011-12-28 47 views
1

我遇到以下問題。我最近激活了'Option Strict On',現在我的LINQ查詢中出現錯誤。 From e As TEnum返回以下錯誤:選項嚴格在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 2011-12-28 12:27:19

+0

恭喜,現在您可以添加它作爲您自己問題的答案並將其標記爲「已接受」。 :-) – Prutswonder 2011-12-28 14:26:48

回答

1

我不得不刪除As TEnum

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) 

的的GetValues返回一個對象(),但除此之外,您還需要定義值的類型。這意味着當您創建選擇列表時,您不必ctype。 (好吧,假設你也有選擇推斷)