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