C#Byref方法

时间:2014-06-22 03:19:32

标签: c#

好的,我在这里仍有问题: 我的代码如下所示:

public static void Init_grablistFile(string grabListPath)
    {
        int compt = 0;
        string List_grablist = "";
        var line = File.ReadAllLines(grabListPath);
        for (int i = 0; i < line.Length; i++)
        {
            if (line[i].Contains("="))
            {
                string[] var_temp = line[i].Split(new Char[] {'='});
                ResizeArray(GlobalVars.tab_grablist, new int[] { compt + 1, 2 });
                GlobalVars.tab_grablist[compt, 0] = var_temp[0];
                GlobalVars.tab_grablist[compt, 1] = var_temp[1];
                //Console.WriteLine(GlobalVars.tab_grablist[compt, 0]);
                //Console.WriteLine(GlobalVars.tab_grablist[compt, 1]);

            }
            else
            {
                if (List_grablist == "")
                {
                    List_grablist = line[i];
                }
                else
                {
                    List_grablist = List_grablist + "|" + line[i];
                }
            }
        }
        //LoadTableFromString(ref GlobalVars.Table_Grablist, ref List_grablist);
    }
    public static void LoadTableFromString(ref string[] table, ref string sString, bool cleanup = false)
    {
        table = sString.Split(new Char[] { '|' });
        if (cleanup)
        {
            sString = "";
        }
    }
    private static Array ResizeArray(Array arr, int[] newSizes)
    {
        if (newSizes.Length != arr.Rank)
            throw new ArgumentException("arr must have the same number of dimensions " +
                                        "as there are elements in newSizes", "newSizes");

        var temp = Array.CreateInstance(arr.GetType().GetElementType(), newSizes);
        int length = arr.Length <= temp.Length ? arr.Length : temp.Length;
        Array.ConstrainedCopy(arr, 0, temp, 0, length);
        return temp;
    }

我的2个全球变量是:

public static string[,] tab_grablist = new string[1, 2];
    public static string[] Table_Grablist;

当我调用Init_grablist时,我收到Global.tab_grablist引发异常的错误。 我不知道发生了什么事。有什么想法吗?

编辑更新代码。

1 个答案:

答案 0 :(得分:0)

您需要在ref方法调用中添加LoadTableFromString,或从ref声明的第一个参数中删除LoadTableFromString,例如根据您当前的代码,这样调用。

LoadTableFromString(ref GlobalVars.Table_Grablist, ref List_grablist);

或以这种方式声明方法:

public static void LoadTableFromString(string[] table, ref string sString, bool cleanup = false)

此外,您应该对nulltable上的sString进行检查,并查看其中哪一项将作为null进行验证。