我写了一个方法,想要在内存中保留一个特定的变量,以优化程序。我遇到的问题是变量previousSearchInfoForSavings
似乎总是与searchInfo
相同,即使它不应该只在某些地方分配。{ p>
我们的想法是,如果您传入相同的searchInfo
数组,则会识别出它与previousSearchInfoForSavings
相同,并且不会运行ClearPageNavigation.main
方法。
然而,情况似乎并非如此。如果为searchInfo
传递了不同的值,那么它似乎并不重要,previousSearchInfoForSavings
似乎会自动更新为这些值。
例如:
如果我第一次将{" X"," Y"," Z"}传递到searchInfo
previousSearchInfoForSavings
为null,因此它将输入该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;
}
}
有什么想法吗?
答案 0 :(得分:3)
问题是你使用的是引用类型,你应该克隆" searchInfo"而不是设置" previousSearchInfoForSavings"等于它。所以而不是:
previousSearchInfoForSavings = searchInfo;
你应该做的事情如下:
previousSearchInfoForSavings = (string[])searchInfo.Clone();
答案 1 :(得分:0)
发生此问题是因为您正在分配previousSearchInfoForSavings = searchInfo,从而在本地变量中复制searchInfo的引用。并且我怀疑您使用更改的值将相同的searchInfo发送到主方法中,这就是为什么数组元素在两个实例中都会更改的原因。为避免这种情况,您必须将searchInfo元素复制到previousSearchInfoForSavings而不是分配。