提问者:小点点

C#数组有问题


请记住,我没有太多的编码经验。

我在访问数组时遇到了问题。我正在使用一个返回数组的函数创建数组,这是一个例子:

int[] ArrayName = ReturnArray(string);

所以现在ArrayName已经创建,它应该与ReturnArray返回的内容相同,不是吗?

我设置了一个断点:

int[] ArrayName = ReturnArray(string);

我可以看到ArrayName创建正确。

当我尝试只访问数组的1个值时,如下所示:

print(ArrayName[0]);

它应该只返回数组中的第一个值,对吗?其实不是!它返回一个以上的值,并且这些值甚至与返回的ReturnArray(string)不匹配

下面是“returnArray”函数:

    public static int[] ReturnArray(string t)
    {
        int i,ii,;
        string ba;
        string base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
        List<int> list = new List<int>();
        for (i = 0; i < t.Length;i++)
        {
            ba = t.Substring(i, 1);
            ii = base64.IndexOf(ba) * 64;
            list.Add(ii);
        }
        return list.ToArray();
    }

添加了更多的代码来执行来自注释的响应

    private void outputLoop()
    {
        int i = 0;
            for (i = 0; i < 63; i++)
            {
                int te = lines[i].Length - 128;
                string tes = lines[i].Substring(te, 64);
                int[] ArrayName = ReturnArray(tes);
                _textlayer.DrawString(_font, ArrayName[i].ToString(), new Vector2(1100, i * 15), Color.White);
          }
    }

共1个答案

匿名用户

null

static void Main( string[] args ) {
    // declare a variable and assign it to the return value of ReturnArray()
    var arr = ReturnArray( "foo" ); 

    // get the first value in the array
    var first = arr[0];
}

public static int[] ReturnArray( string t ) {
    int i, ii;
    string ba;
    string base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    List<int> list = new List<int>();
    for( i = 0; i < t.Length; i++ ) {
        ba = t.Substring( i, 1 );
        ii = base64.IndexOf( ba ) * 64;
        list.Add( ii );
    }
    return list.ToArray();
}

首先,如果你想做一个基64算法,它已经在框架中完成了。如果你想要学习,那很好,但是有很多例子可以继续学习。

ii = base64.IndexOf( ba ) * 64;

其次,您的代码确实返回了我所期望的结果,即来自乘积的数字数组。

这个小例子为“foo”生成,索引0处的值是1984。

“aaa”产生,因为IndexOf()是0*64。

正如您所期望的那样,“bbb”产生,因为IndexOf()返回1并且它被乘以64。

更多调试代码(基于注释):

int[] arr = ReturnArray( "DADBALAMANAOAAABAYAZAaAbAcAdAeAff/BIBJBKBLBMBNBOBJBKBLBMBNBOBPf/AAABAoApAqArAsAt‌​AuAvf/f/+4+5f/f/f/AAABf/B4B5B6DQAZAaAbAcAdAeAZAa" );

// should print "192"
System.Diagnostics.Debug.WriteLine( arr[0] );