我在复合控件中有一个属性,用于在实际设置相关的私有字段并执行其他一些操作之前检查值是否已更改。
但是,它似乎从未评估过该声明。
这是该属性的代码:
public T SearchCriteria
{
get
{
return mySearchCriteria;
}
set
{
if (value != mySearchCriteria)
{
mySearchCriteria = value;
EnsureChildControls();
SearchGridParser parser = SearchGridParserFactory.GetParser(this.Type);
parser.SetSearchPanelControls<T>(this.mySearchCriteria, ref mySearchParametersPanel);
GridView.PageIndex = 0;
}
}
}
我已经单步执行了代码,每次到达“value != mySearchCriteria”时,它都会评估为 false 并跳过 if 语句中的代码。事实上,即使我将其更改为“value == mySearchCriteria”,它也会这样做。如果只是完全跳过它,无论它如何评估!
什么嘿?
我尝试更改检查中参数的顺序,并使用 object.Equals() 但这些更改都没有任何区别。
我已经覆盖了 Equals、!=、== 和 GetHashCode。
在代码中的其他地方,它对这些对象类型使用“==”和“!=”没有问题,所以我知道我的覆盖工作正常。
问题是,这甚至不会触及被覆盖的方法。我在 "=="、"!="、"Equals" 和 "GetHashCode" 上放置了中断,并且在评估 "value != mySearchCriteria" 语句时没有调用它们。
就像它完全跳过评估它一样。