Vb.net 在复选框列表中显示所选项目的列表

Vb.net 在复选框列表中显示所选项目的列表,vb.net,Vb.net,我得到的错误是 无法将类型为“WhereSelectEnumerableTerator2[System.Web.UI.WebControl.ListItem,System.String]”的对象强制转换为类型为“System.Collections.Generic.List1[System.String]” 我怎样才能改正呢 谢谢如果要将结果分配给列表(字符串)变量,则需要列表(字符串)对象。您可以在任何可枚举列表上列出所有ToList,以创建列表(共T个) 另外,您的aseneumerable

我得到的错误是

无法将类型为“WhereSelectEnumerableTerator
2[System.Web.UI.WebControl.ListItem,System.String]”的对象强制转换为类型为“System.Collections.Generic.List
1[System.String]”

我怎样才能改正呢


谢谢

如果要将结果分配给
列表(字符串)
变量,则需要
列表(字符串)
对象。您可以在任何可枚举列表上列出所有
ToList
,以创建
列表(共T个)

另外,您的
aseneumerable
调用没有意义,因为
Cast(Of T)
已经返回了一个
IEnumerable(Of T)

最后,在一行上声明一个变量,然后设置它的值,这是不必要的冗长。这没有错,但毫无意义。在您的例子中,您不仅声明了一个变量,而且还创建了一个从未使用过的对象。如果不创建新的对象,请不要创建该对象;我不想要一个你不想要的新东西;t因为你在下一行得到一个物体

Dim list As New List(Of String)

list = chkparameter.Items
                   .Cast(Of ListItem)
                   .AsEnumerable()
                   .Where(Function(x) x.Selected)
                   .Select(Function(x) x.Value)
也不需要声明变量的类型,因为它将从初始化表达式中推断,即
ToList
返回
列表(字符串)
,因此可以从中推断变量的类型。不是每个人都喜欢在不完全明显的情况下使用类型推断,所以我不说了。但我倾向于这样做:

Dim list As List(Of String) = chkparameter.Items.
                                           Cast(Of ListItem).
                                           Where(Function(x) x.Selected).
                                           Select(Function(x) x.Value).
                                           ToList()

顺便说一下,请注意,使用一些合理的格式,代码阅读起来容易多了?如果要使用这样的链式函数语法,最好在得到两个或三个以上的函数后,将每个函数放在不同的行上。

我想知道为什么有人否决了这个答案。OP接受它作为解决方案的事实表明这是一个很好的答案,并且它特别解决了表达式无法分配给变量的结果问题,这表明这是一个很好的答案。否决票到底是为了什么?
Dim list = chkparameter.Items.
                        Cast(Of ListItem).
                        Where(Function(x) x.Selected).
                        Select(Function(x) x.Value).
                        ToList()