如何从功能上编写这个VB.Net循环?

如何从功能上编写这个VB.Net循环?,vb.net,linq,Vb.net,Linq,我有一个VB.Net函数,可以将NameValueCollection转换为IDictionary。我如何在功能上编写它(使用选择等,而不是循环) 调用的公共函数(ByVal源作为NameValueCollection) 作为IDictionary(指字符串、字符串) Dim ret=新字典(字符串的,字符串的) Dim keys=源。键 对于每个键中的键 Dim sKey=TryCast(键,字符串) Dim sVal=TryCast(源(键),字符串) 如果斯凯一文不值,或者斯瓦尔一文不值

我有一个VB.Net函数,可以将
NameValueCollection
转换为
IDictionary
。我如何在功能上编写它(使用
选择
等,而不是循环)


调用的公共函数(ByVal源作为NameValueCollection)
作为IDictionary(指字符串、字符串)
Dim ret=新字典(字符串的,字符串的)
Dim keys=源。键
对于每个键中的键
Dim sKey=TryCast(键,字符串)
Dim sVal=TryCast(源(键),字符串)
如果斯凯一文不值,或者斯瓦尔一文不值,那么继续
ret(sKey)=sVal
下一个
回程网
端函数

如果存在任何非字符串,
是否会抛出异常?我不想这样。@JoelFan:
Cast()
正在键上运行(这是NameValueCollection的枚举器返回的),键只能是字符串。之所以需要它,是因为NameValueCollection没有实现
IEnumerable
。它似乎返回了一个字符串字典,而没有实现。我的函数声明与我的问题中的相同:as IDictionary(Of String,String)。也许VB.Net从函数返回时会自动进行转换?@JoelFan:你说得对;我没有意识到
NameValueCollection.Item()
被声明为返回
String
@xfx:所有LINQ方法(除了
Cast()
of type()
之外)都扩展了
IEnumerable
。由于
NameValueCollection
仅实现
IEnumerable
,因此需要调用
Cast()
对其进行泛型化。(
Cast()
返回一个可枚举的通用包装)如果存在任何非字符串,
Cast
是否会引发异常?我不想这样。@JoelFan:
Cast()
正在键上运行(这是NameValueCollection的枚举器返回的),键只能是字符串。之所以需要它,是因为NameValueCollection没有实现
IEnumerable
。它似乎返回了一个字符串字典,而没有实现。我的函数声明与我的问题中的相同:as IDictionary(Of String,String)。也许VB.Net从函数返回时会自动进行转换?@JoelFan:你说得对;我没有意识到
NameValueCollection.Item()
被声明为返回
String
@xfx:所有LINQ方法(除了
Cast()
of type()
之外)都扩展了
IEnumerable
。由于
NameValueCollection
仅实现
IEnumerable
,因此需要调用
Cast()
对其进行泛型化。(
Cast()
返回通用包装器可枚举)仅供参考,我这样做是为了通过WCF调用方法,因为NameValueCollection不可序列化,但IDictionary是。仅供参考,我这样做是为了通过WCF调用方法,因为NameValueCollection不可序列化,但IDictionary是。
<Extension()>
Public Function ToDictionary(ByVal source As NameValueCollection)
        As IDictionary(Of String, String)
    Dim ret = New Dictionary(Of String, String)
    Dim keys = source.Keys
    For Each key In keys
        Dim sKey = TryCast(key, String)
        Dim sVal = TryCast(source(key), String)
        If sKey Is Nothing OrElse sVal Is Nothing Then Continue For
        ret(sKey) = sVal
    Next
    Return ret
End Function
Return source.Cast(Of String)().
             ToDictionary(Function(key) key, Function(key) source(key))