从 vb.net 中的字典创建排序字典

问题描述

我正在尝试将用 C# 编写的代码改编成 vb.net 应用程序。在某一时刻,Dictionary 类型的变量被转换为 SortedDictionary 类型的变量。我已经在 vb.net 中重新编写了它,但它会引发错误。需要更改哪些代码才能在 vb.net 中工作?

这是原始的 c# 代码

var headers = new Dictionary<string,string>();
headers.Add("x-amz-date",requestMoment.ToString("yyyyMMddTHHmmssZ"));
headers.Add("x-amz-access-token",txtOAuthToken.Text);
headers.Add("host","sellingpartnerapi-na.amazon.com");
SortedDictionary<string,string> sortedHeaders = new SortedDictionary<string,string>(headers);

这是我的 vb.net 代码

Dim headers = 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)

c# 工作正常。在vb.net代码中,最后一行抛出这个错误

重载解析失败,因为没有缩小转换就无法调用可访问的“New”: 'Public Overloads Sub New(dictionary As IDictionary(Of String,String))':参数匹配参数'dictionary'从'Object'缩小到'IDictionary(Of String,String)'。 'Public Overloads Sub New(comparer As IComparer(Of String))':参数匹配参数'comparer'从'Object'缩小到'IComparer(Of String)'。

解决方法

对我来说麻烦字典没有意义:

Dim sortedHeaders As New SortedDictionary(Of String,String)
sortedHeaders.Add("x-amz-date",requestMoment.ToString("yyyyMMddTHHmmssZ"))
sortedHeaders.Add("x-amz-access-token",gblOAuthToken)
sortedHeaders.Add("host","sellingpartnerapi-na.amazon.com")
,

在类的最顶部,在导入语句之前设置“infer on”,为我解决了这个问题。

 Option Infer On