如何从功能上编写这个VB.Net循环?
我有一个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(源(键),字符串) 如果斯凯一文不值,或者斯瓦尔一文不值
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))