【问题标题】:Create sorted dictionary from dictionary in vb.net从 vb.net 中的字典创建排序字典
【发布时间】:2021-06-24 14:42:21
【问题描述】:

我正在尝试将用 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代码中,最后一行抛出这个错误

重载解析失败,因为在没有缩小转换的情况下无法调用可访问的“新建”: '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)'。

【问题讨论】:

  • 你有Option Infer On吗?为什么不呢?
  • @GSerg 默认情况下它是关闭的,因此可以安全地假设 OP 没有使用 infer。鉴于此,headers 应该声明为Dim headers as Dictionary,否则它会得到Object 的类型,这会混淆重载决议。要么在 SortedDictionary 构造函数中将 headers 显式转换为 IDictionary
  • 只需将字典声明为Dim headers As IDictionary(Of String, String) = New Dictionary(Of String, String)()。或Dim headers As New Dictionary(Of String, String)()。将所有Options 设置为On,C# 样式。你很好。
  • @GSerg Setting infer on 解决了这个问题。你能解释一下它的作用以及为什么在 vb.net 中而不是在 C# 中需要它吗?我主要是 C# 程序员,但这是一个用 vb.net 编写的旧公司应用程序。谢谢你的帮助!
  • @boilers222 通过单击我评论中的链接,您可以看到什么。它在 VB.NET 中是必需的,因为 VB.NET 在默认情况下对类型放宽,这与 C# 不同,其中 var 总是像 DimInfer On 一样工作。

标签: c# vb.net dictionary sorteddictionary


【解决方案1】:

对我来说打扰字典没有意义:

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")

【讨论】:

    【解决方案2】:

    在类的最顶部,在 Import 语句之前设置“推断”,为我解决了这个问题。

     Option Infer On
    

    【讨论】:

      猜你喜欢
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 2017-05-05
      • 1970-01-01
      • 2018-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多