比较两个类型对象数组的值

Ler*_*ica 1 c# arrays

在运行时我得到两个不同的数组{object[10]},我想检查第一个数组中的值是否与另一个数组中的值相同.元素的实际类型可以是string,intbool.例如元素[1] = "Test"和元素[2] = 3等.

我做的是这样的:

  for (var j = 0; j < newData.ItemArray.Length; j++)
  {
    if (newData.ItemArray[j].ToString().ToLower() != originalData.ItemArray[j].ToString().ToLower())
    {
      isModified = true;
      break;
    }
  }
Run Code Online (Sandbox Code Playgroud)

我不能说我对这个解决方案感到满意,但似乎通过我做的几个测试来判断.但是我觉得应该有更好的方法来做到这一点.

另外,评论中的Judjing可能在我的问题中并不太清楚.这是我得到的输入:

在此输入图像描述

我希望其他数组包含相同的数据.唯一的问题是所有元素都存储为对象.因此,例如,我想知道[3]第一个数组中的元素是否[3]与另一个数组中的元素相似.理想情况下,我想比较两个布尔值,但由于所有内容都存储为对象,我正在寻找如何检查值是否相同的想法,或者例如来自[1] = "Training"另一个数组中的[1] = "Not Training"等等.

Tim*_*ter 5

因为你使用ItemArray我很确定它的属性DataRow返回Object[]该行的所有字段.所以你想比较两个数据行.

你可以使用SequenceEqual:

bool isModifed = !newData.ItemArray.SequenceEqual(originalData.ItemArray);
Run Code Online (Sandbox Code Playgroud)

这比较了字符串区分大小写而不是您的方法.

如果你想忽略这个案子:

isModifed = !newData.ItemArray.Select(obj => obj?.ToString())
    .SequenceEqual(originalData.ItemArray.Select(obj => obj?.ToString())
        , StringComparer.InvariantCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)