在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)
答案 0 :(得分:2)
默认情况下,VB.Net允许 late binding (OPTION STRICT OFF
)。后期绑定等效于C#中的dynamic
,意味着运行时按名称查找要调用的方法,并且编译器不进行类型检查或验证。后期绑定只能访问公共成员,因此扩展{friend}方法(例如Select
)不可用。这对于VB.Net中的object
变量是自动的。 customParams
具有(非object
)分配的类型,因此使用早期绑定。