C#有阵列问题

时间:2012-08-31 02:45:23

标签: c#

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

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

int[] ArrayName = ReturnArray(string);

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

我确定了一个断点:

int[] ArrayName = ReturnArray(string);

我可以看到ArrayName已正确创建。

当我尝试只访问数组的1个值时,这样:

print(ArrayName[0]);

它应该只返回数组中的第一个值吗?那不是! 它返回一个超过一个值,值甚至不匹配ReturnArray(字符串)返回

这是“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 个答案:

答案 0 :(得分:2)

这是一份工作样本。让我们解构。

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算法,那么它已经完成并且in the framework。如果你想学习,那很好,但有一些例子可以继续。

ii = base64.IndexOf( ba ) * 64;

其次,您的代码确实会返回我期望的内容,即来自IndexOf() * 64的产品的数字数组。

这个小例子为“foo”产生1984, 2560, 2560,而在索引0的值为1984。

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

正如您所料,“BBB”产生64, 64, 64,因为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] );