【问题标题】:ClosedXml.Excel HasDuplicates Extension Method Missing following Upgrade升级后缺少 ClosedXml.Excel HasDuplicates 扩展方法
【发布时间】:2021-09-08 14:01:57
【问题描述】:

我的任务是处理一个用 WPF 编写的遗留项目,该项目被集成到一个更大的应用程序中并使其独立。它已经有一段时间没有被触及了,根据经验,在尝试更新相关包时,这总是会导致问题。我的团队定期进行维护以使技术保持最新,但代码库由另一个团队维护,因此他们没有遵循任何维护计划。我发现 ClosedXml 存在问题,我们的部分代码引用了 0.74.0 中可用的扩展方法 HasDuplicates()(在 ClosedXml.Excel 中找到),但在升级最新版本 (0.95.4) 时不存在.搜索帮助并没有返回任何有用的信息,但我确信某处必须有一个发布说明,说明它已被删除或重命名,但我找不到它!
使用 0.74.0,此代码编译:

if (serializedPeriodAllocations.Select(o => o.Period).HasDuplicates())
        {
            throw new Exception("Duplicate period allocations found!");
        }

但是当我将 ClosedXml 升级到 0.95.4 或更高版本时,它没有,并且我收到以下错误:

CS1061  'IEnumerable<int>' does not contain a definition for 'HasDuplicates' and no accessible extension method 'HasDuplicates' accepting a first argument of type 'IEnumerable<int>' could be found (are you missing a using directive or an assembly reference?)

有谁知道是否有任何文档可以帮助我找出它不再起作用的原因,以及是否可以升级?

【问题讨论】:

  • 这样的方法似乎仍然存在:github.com/ClosedXML/ClosedXML/blob/develop/ClosedXML/… 所以我猜你只需要修复一些usings 什么的
  • 感谢@AakashM,感谢链接。看起来它已从 Excel 移至 Extensions,我确定我试过了,但会再试一次。再次感谢
  • 我不知道如何实现它——它在 Excel 或 Extensions 中不可用。我设法通过升级到 0.90.0 来保留对扩展的访问权限,但是再进一步,问题又回来了。主要优先事项是让应用程序独立运行并且已经实现,因此稍后将处理此问题。

标签: c# closedxml


【解决方案1】:

经过进一步调查,我在项目中发现了一个 Extensions 类,其中包含一个 HasDuplicates 扩展,其编码如下:

    public static bool HasDuplicates<T>(this ICollection<T> source)
    {
        return source.Distinct().Count() != source.Count;
    }

我为接受 IEnumerable 的扩展添加了一个覆盖:

    public static bool HasDuplicates<T>(this IEnumerable<T> source)
    {
        var enumerable = source as T[] ?? source.ToArray();
        return enumerable.Distinct().Count() != enumerable.Length;
    }

删除对 ClosedXml.Excel 的使用后,HasDuplicates() 没有按预期返回错误。

【讨论】:

    猜你喜欢
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2014-05-31
    • 1970-01-01
    相关资源
    最近更新 更多