【问题标题】:Missing definition for TryAdd() in Dictionary [closed]字典中缺少 TryAdd() 的定义[关闭]
【发布时间】:2021-10-13 02:54:30
【问题描述】:

我正在使用教程https://www.dotnetperls.com/dictionary 中的示例 但是我有缺少对TryAdd 的引用的问题。我应该添加一些额外的参考来使用这种方法吗?我在文档 https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2.tryadd?view=net-5.0

中没有找到任何内容
var items = new Dictionary<string, int>();
// Part 1: add the string with value 1.
bool result = items.TryAdd("test", 1);

严重性代码描述项目文件行抑制状态 错误 CS1061 'Dictionary' 不包含 'TryAdd' 的定义,并且找不到接受类型为 'Dictionary' 的第一个参数的可访问扩展方法 'TryAdd'(您是否缺少使用指令还是程序集引用?)CsharpTest C:\path\to\file\Program.cs 672 Active

更新:此方法适用于 .NET 5 ang 以上(我使用的是旧框架)

【问题讨论】:

  • 您使用的是什么版本的 .NET?
  • 您使用的是 .net 5 吗? With this method (part of .NET 5)...
  • 请检查Applies To 表以验证您的 .NET 运行时是否支持给定的操作。
  • TryAdd 是在 .Net Core 2 中添加的,因此如果您使用的是 .Net Core 1 或 .Net Framework(在 .Net 5 之前),那么它将不可用。
  • @Ales100 .NET Framework 和 .NET Core 已成为过去。 .NET(不带任何后缀)5是新的统一应用开发平台。 .NET 6 是即将推出的 .NET 版本。

标签: c# .net dictionary


【解决方案1】:

cmets 是半正确的。这种方法是在 .NET Core 2.0 和 .NET Standard 2.1 中引入的,所以你需要你的目标框架至少是这样。特别是,它不存在于 .NET Framework(任何版本)上,但它存在于最新的 .NET 5 上。

如果您在较旧的运行时需要它,您可以编写一个扩展方法(取自dotnet/runtime, System.Collections.Generic.CollectionExtensions)。

public static bool TryAdd<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, TKey key, TValue value)
{
    if (dictionary == null)
    {
        throw new ArgumentNullException(nameof(dictionary));
    }

    if (!dictionary.ContainsKey(key))
    {
        dictionary.Add(key, value);
        return true;
    }

    return false;
}

它的性能特征比Dictionary&lt;,&gt; 的实例方法更差,因为它先进行单独查找,但不太可能相关。

【讨论】:

    猜你喜欢
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    相关资源
    最近更新 更多