VB.NET将Dictionary转为SortedDictionary时报重载错误如何解决
问题原因
报错是因为VB.NET中headers变量的类型被隐式识别为Object,而非明确的Dictionary(Of String, String)类型,传入SortedDictionary构造函数时无法匹配对应的重载。默认情况下如果项目没有开启Option Infer,使用Dim 变量 = 实例的写法会把变量类型推导为Object。
修复方案
- 方法1:明确声明
headers的变量类型
直接给headers指定明确类型即可,修改后代码如下:
Dim headers As Dictionary(Of String, String) = New Dictionary(Of String, String)() headers.Add("x-amz-date", requestMoment.ToString("yyyyMMddTHHmmssZ")) headers.Add("x-amz-access-token", gblOAuthToken) headers.Add("host", "sellingpartnerapi-na.amazon.com") Dim sortedHeaders As SortedDictionary(Of String, String) = New SortedDictionary(Of String, String)(headers)
- 方法2:开启
Option Infer选项
在项目属性的编译配置页中开启Option Infer,或者在当前代码文件的最顶部添加Option Infer On,此时VB.NET会自动把headers推断为Dictionary(Of String, String)类型,原有代码无需其他修改即可正常运行。 - 方法3:传入参数时做强制类型转换
如果不想修改原有headers的声明逻辑,可以在传入构造函数时强制转换类型:
Dim sortedHeaders As SortedDictionary(Of String, String) = New SortedDictionary(Of String, String)(DirectCast(headers, IDictionary(Of String, String)))
内容的提问来源于stack exchange,提问作者boilers222
相关产品推荐
相关产品推荐

