【问题标题】:Option Strict On LINQ VB.NET troubleOption Strict On LINQ VB.NET 问题
【发布时间】:2024-05-17 18:05:01
【问题描述】:

我遇到了以下问题。我最近激活了“Option Strict On”,现在我的 LINQ 查询出现错误。 From e As TEnum 返回以下错误:

Option Strict On 不允许从 'Object' 到 '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

【问题讨论】:

  • 已经找到解决方案,必须删除“As TEnum”
  • 恭喜,现在您可以将其添加为您自己问题的答案并将其标记为“已接受”。 :-)

标签: vb.net linq enums vb.net-2010


【解决方案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 返回一个 Object(),但除此之外,您还需要定义值的类型。这意味着您在创建选择列表时不必键入它。 (好吧,假设你也有 option infer off)

【讨论】:

    【解决方案2】:

    我不得不删除As TEnum

    【讨论】:

      【解决方案3】:

      [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
      

      【讨论】: