繁体   English   中英

VB.Net为什么需要显式声明我的字典才能使用select?

[英]VB.Net Why does my dictionary need to be explicitly declared in order to use select?

在MVC5中使用VB.Net。

我有一本字典:

Dim Filter as New Dictionary(Of String, Object)

' the key's value is another dictionary
Filter.Add("customParams", New Dictionary(Of String, String) From {{"k1","v1"}, {"k2","v2"}, {"k3","v3"}})

并且我正在尝试将Filter(“ customParams”)值(它是Dictionary(字符串,字符串))转换为定界字符串,“ k1 = v1,k2 = v2,k3 = v3”

这不起作用:

Dim kvString As String = String.Join(", ", Filter("customParams").Select(Function(x) x.Key & "=" + x.Value).ToArray())

我得到这个例外:

找不到类型为'Dictionary(Of String,String)'的公共成员'Select'。

但是,如果我为Dictionary(Of String,String)显式声明一个新变量,并使用它代替Filter(“ customParams”),则可以使用:

Dim customParams As Dictionary(Of String, String) = Filter("customParams")
Dim kvString As String = String.Join(", ", customParams.Select(Function(x) x.Key & "=" + x.Value).ToArray())

为什么它不起作用呢? 异常本身说它正在使用Dictionary(Of String,String)

默认情况下,VB.Net允许后期绑定OPTION STRICT OFF )。 后期绑定等效于C#中的dynamic ,这意味着运行时按名称查找要调用的方法,并且编译器不进行类型检查或验证。 后期绑定只能访问公共成员 ,因此扩展(朋友)方法(例如“ Select不可用。 这对于VB.Net中的object变量是自动的。 customParams具有(非object )分配的类型,因此使用早期绑定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM