[英]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.