【问题标题】:Error comparing arrays in C#: 'System.Array' does not contain a definition for 'sequenceEqual'在 C# 中比较数组时出错:“System.Array”不包含“sequenceEqual”的定义
【发布时间】:2021-08-16 09:20:30
【问题描述】:

我正在使用 C# 和 .NET 4.7.2 阅读两个 Excel 工作表:

var sheet1 = newWS.UsedRange.Value;
var sheet2 = oldWS.UsedRange.Value;

sheet1(或 sheet2)上的手表按预期显示了一个数组。但是当我尝试使用以下方法比较它们时:

if (sheet1.SequenceEqual(sheet2))

失败,因为“System.Array”不包含“SequenceEqual”的定义

我已经声明:

using System.Linq;

事实上,我已经在同一个模块中使用了一个简单的例子来让 SequenceEqual 工作:

            string[] array1 = { "dot", "net", "deves" };
            string[] array3 = { "dot", "net", "deves" };
            bool b = array1.SequenceEqual(array3);
            Console.WriteLine(b);

那么我在这里错过了什么?它不喜欢数组变体吗? System.Array 是没有实现 sequenceEqual 的特定类型的数组吗?在这个版本的 .NET 中没有实现它?我的案子错了???或者更可能是完全不同的东西?

任何提示表示赞赏。

(当然更大的问题是比较两个数组 sheet1 和 sheet2 的最佳方法——看起来 SequenceEqual 应该满足我的需要,但也许有更好的方法?)

【问题讨论】:

  • 会将其转换为适当的 .net 类型并执行SequenceEquals 帮助吗? sheet1是什么类型?
  • @shahkalpesh 我认为它被装进了object,因为VBA类型是variant

标签: c# arrays .net


【解决方案1】:

SequenceEqualIEnumerable<T> 的扩展方法。 System.Array 没有实现有类型的IEnumerable<T>,只有无类型的IEnumerable。这就是你的编译器抱怨的原因。

比较两个字符串数组很容易。知道如何比较两个字符串,剩下的工作可以是一个很好的循环。但是这种方法甚至应该如何开始比较 untyped 类型的两个东西。两个结构不明的物体?什么时候两个对象会相等?

如果你知道你的数组包含什么,你可以将它转换成两个typed数组,其中包含你想要比较的值,然后你可以使用SequenceEqual方法。

【讨论】:

  • 有一种感觉,就是这样。至少我知道我的头撞到的是一堵砖墙,我应该停下来找一些更柔软的东西。也许是乐高墙。
猜你喜欢
  • 1970-01-01
  • 2015-07-24
  • 2013-11-15
  • 2014-11-23
  • 2015-02-05
  • 2012-09-29
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多