在运行时我得到两个不同的数组 {object[10]}
我想检查第一个数组中的值是否与另一个数组中的值相同。元素的实际类型可以是 string
、int
或 bool
。例如元素 [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;
}
}
我不能说我对这个解决方案感到满意,但是从我所做的几个测试来看它似乎是可行的。但是我觉得应该有更好的方法来做到这一点。
额外的 从评论来看,我的问题可能不太清楚。这是我得到的输入:
我希望另一个数组包含相同的数据。唯一的问题是所有元素都存储为对象。因此,例如,我想知道第一个数组中的元素 [3]
是否与另一个数组中的元素 [3]
相似。理想情况下,我想比较两个 bool 值,但由于所有内容都存储为对象,我正在寻找如何检查值是否相同的想法,或者例如来自 [1] = "Training"
另一个数组是 [1] = "Not Training"
等等。
最佳答案
由于您使用 ItemArray
我很确定它是 DataRow
的属性,它返回该行所有字段的 Object[]
。所以您想比较两个数据行。
您可以使用 SequenceEqual
:
bool isModifed = !newData.ItemArray.SequenceEqual(originalData.ItemArray);
与您的方法相反,这会区分大小写地比较字符串。
如果你想忽略大小写:
isModifed = !newData.ItemArray.Select(obj => obj?.ToString())
.SequenceEqual(originalData.ItemArray.Select(obj => obj?.ToString())
, StringComparer.InvariantCultureIgnoreCase);
关于c# - 比较两个对象类型数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41895274/