我写了一个方法,其思想是在内存中保留某个变量,以优化程序。我遇到的问题是,在变量中,previousSearchInfoForSavings
似乎总是与searchInfo
相同,尽管它不应该是,因为它只分配在某些地方。
其想法是,如果传入相同的searchInfo
数组,它将识别出它与previousSearchInfoForSavings
相同,而不运行ClearPageNavigation.main
方法。
然而,情况似乎并非如此。如果为searchInfo
传递不同的值,这似乎无关紧要,并且previousSearchInfoForSavings
似乎会自动更新为这些值。
例如:
如果我在第一次previousSearchInfoForSavings
为空时将{"X"、"Y"、"Z"}作为searchInfo
传入,那么它将进入If语句。这很好。下一次,如果我在开头(注释所在的位置)输入{"A"、"B"、"C"},这些数组就已经相等了。事实并非如此。
我的代码:
private static TableRow[] TRforSavings = null;
private static string[] previousSearchInfoForSavings = null;
public static bool[] main(
string[] searchInfo,
string[] compareInfo,
string ClearFinancesTestPageURL
) {
if (searchInfo[1] == "Savings") {
//searchInfo == previousSearchInfoForSavings here
bool[] results;
if (previousSearchInfoForSavings == null) {
previousSearchInfoForSavings = searchInfo;
TableRow[] TR = ClearPageNavigation.main(
ClearFinancesTestPageURL,
searchInfo[0],
searchInfo[1],
searchInfo[2],
searchInfo[3]
);
results = CompareSavings.main(TR, compareInfo);
TRforSavings = TR;
} else {
if (ArraysEqual(previousSearchInfoForSavings, searchInfo)) {
results = CompareSavings.main(TRforSavings, compareInfo);
} else {
TableRow[] TR = ClearPageNavigation.main(
ClearFinancesTestPageURL,
searchInfo[0],
searchInfo[1],
searchInfo[2],
searchInfo[3]
);
results = CompareSavings.main(TR, compareInfo);
TRforSavings = TR;
previousSearchInfoForSavings = searchInfo;
}
}
//searchInfo == previousSearchInfoForSavings here
return results;
}
}
有什么想法吗?
问题是您使用的是引用类型,您应该克隆"searchInfo",而不是将"previousSearchInfoForSavings"设置为等于它
previousSearchInfoForSavings = searchInfo;
你应该做这样的事情:
previousSearchInfoForSavings = (string[])searchInfo.Clone();
发生此问题的原因是您正在分配previousSearchInfoForSavings=searchInfo,从而在本地变量中复制searchInfo的引用。我怀疑您将相同的searchInfo发送到具有更改值的主方法中,这就是为什么数组元素在两个实例中都会更改的原因。为了避免这种情况,您必须将searchInfo元素复制到以前的SearchInfoForSavings中,而不是分配。