C#变量值分配错误的问题

时间:2014-09-09 09:43:51

标签: c# variables global-variables

我写了一个方法,想要在内存中保留一个特定的变量,以优化程序。我遇到的问题是变量previousSearchInfoForSavings似乎总是与searchInfo相同,即使它不应该只在某些地方分配。

我们的想法是,如果您传入相同的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;
    }
}

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

问题是你使用的是引用类型,你应该克隆" searchInfo"而不是设置" previousSearchInfoForSavings"等于它。所以而不是:

previousSearchInfoForSavings = searchInfo;

你应该做的事情如下:

previousSearchInfoForSavings = (string[])searchInfo.Clone();

答案 1 :(得分:0)

发生此问题是因为您正在分配previousSearchInfoForSavings = searchInfo,从而在本地变量中复制searchInfo的引用。并且我怀疑您使用更改的值将相同的searchInfo发送到主方法中,这就是为什么数组元素在两个实例中都会更改的原因。为避免这种情况,您必须将searchInfo元素复制到previousSearchInfoForSavings而不是分配。