C#变量值分配不正确



我写了一个方法,其思想是在内存中保留某个变量,以优化程序。我遇到的问题是,在变量中,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中,而不是分配。

相关内容

  • 没有找到相关文章