我想显示一个包含所有不同值的哈希集 在两个DataGridView之间,但我没有成功显示字符串,我附加了图像。
var dataA = new HashSet<string>();
var dataB = new HashSet<string>();
for (int i = 1; i < dgv_A.Rows.Count; i++)
{
dataA.Add(dgv_A[8, i].Value.ToString());
}
for (int i = 1; i < dgv_B.Rows.Count; i++)
{
dataB.Add(dgv_B[8, i].Value.ToString());
}
if (dataA == dataB)
{
lbl_resultado.Text = "Las certificaciones estan correctas";
}
else
{
var error = dataA.Except(dataB).Concat(dataB.Except(dataA));
var container = new HashSet<string>(error);
dgv_B.DataSource = container.ToList();
}
需要的值有:
代码的结果:
注意:if (dataA == dataB) part
,这不是我需要答案的问题,但谢谢。该部分需要它:
else
{
var error = dataA.Except(dataB).Concat(dataB.Except(dataA));
var container = new HashSet<string>(error);
dgv_B.DataSource = container.ToList();
}
注2:项目的主要操作是验证文档(例如,没有用户被修改)如果任何值被更改,您需要知道哪些值 更改。
var error = dataA.Except(dataB).Concat(dataB.Except(dataA));
var container = new HashSet<string>(error);
dgv_B.DataSource = container.ToList();
我得到了不同的值 fron dataA和dataB,但我无法让它显示出现的文本。
注意事项:
1条答案
按热度按时间3j86kqsm1#
你的问题是:
HashSet<T>
type does not override the==
operator。dataA == dataB
只执行引用相等性比较,这意味着与Object.ReferenceEquals( dataA, dataB )
相同,它总是是false
,因为dataA
和dataB
是对不同GC对象的引用。SetEquals()
method:Enumerable.SequenceEquals
,因为它将HashSet
计算为有序的值序列,但HashSet
是一个数学集合,它是无序的,并且(AFAIK)它的HashSet<T>.Enumerator
迭代器以 undefined 顺序返回它的元素,因此试图通过比较序列来检查两个集合的集合相等性是不正确的。