显示复选框列表中所选项目的列表

时间:2014-11-10 00:33:48

标签: vb.net

Dim list As New List(Of String)

list = chkparameter.Items
                   .Cast(Of ListItem)
                   .AsEnumerable()
                   .Where(Function(x) x.Selected)
                   .Select(Function(x) x.Value)

我得到的错误是

无法投射类型' WhereSelectEnumerableIterator 2[System.Web.UI.WebControls.ListItem,System.String]' to type 'System.Collections.Generic.List 1 [System.String]'。

我怎样才能纠正它。

由于

1 个答案:

答案 0 :(得分:0)

如果要将结果分配给List(Of String)变量,则需要List(Of String)个对象。您可以在任何可枚举列表中ToList创建List(Of T)

此外,您的AsEnumerable来电毫无意义,因为Cast(Of T)已经返回IEnumerable(Of T)

最后,在一行上声明变量然后设置其值是不必要的冗长。没错,但没有意义。在您的情况下,您不仅要声明变量,还要创建一个从未使用过的对象。如果你不这样做,就不要创建一个New对象;实际上你想要一个新对象,而不是因为你在下一行得到了一个对象。

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

还没有必要声明变量的类型,因为它将从初始化表达式中推断出来,即ToList返回List(Of String),因此可以推断出变量的类型从那以后。不是每个人都喜欢使用类型推断,但它并不完全明显,所以我会让你离开那个。我倾向于这样做:

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

顺便说一下,注意一些合理的格式化代码读取的容易程度是多少?如果您要使用这样的链式函数语法,一旦获得两个或三个以上的函数,将每个函数放在不同的行上是一个非常好的主意。

相关问题