1

我正在构建这个简单的程序,但我遇到了一些问题。我将一个数组封装到一个类中,并用随机数填充它。当在 Main 我想使用 Console.WriteLine() 评估它时,它会给出一个错误:

无法将带有 [] 的索引应用于“方法组”类型的表达式。

我做错什么了?

class Program
{
    public static void Main(string[] args)
    {
        Arrays randomArray = new Arrays();

        Console.WriteLine("Please type in an integer!");

        int encryptionKey = Convert.ToInt32(Console.ReadLine());
        randomArray.MyArray.SetValue(encryptionKey, 0);

        int i = 0;
        while (i < 256)
        {
            Console.WriteLine(i + "  " + randomArray.MyArray[i]);
            i++;
        }
        Console.ReadLine();
    }

    public static int[] MakeArray()
    {
        Random rnd = new Random();
        var value = Enumerable.Range(0, 256)
                              .Select(x => new { val = x, order = rnd.Next() })
                              .OrderBy(i => i.order)
                              .Select(x => x.val)
                              .ToArray();
        return value;
    }
}

public class Arrays
{
    private int[] _myArray;

    public int[] MyArray
    {
        get
        {
            return _myArray;
        }
        set 
        {
            _myArray = Program.MakeArray();
        }
    }
}
4

1 回答 1

2

首先,排队

randomArray.MyArray.SetValue(encryptionKey, 0);

程序给你一个异常(空引用),因为在这一行中 MyArray 的 get 部分将执行并将空返回给调用者。所以你必须在类 (Arrays) 的构造函数中设置你的数组 (MyArray) 值,我认为这部分的设计是错误的

set 
        {
            _myArray = Program.MakeArray();
        } 

试试这个

public class Arrays
{
    public int[] _myArray;

    public Arrays() {
           MyArray = Program.MakeArray();
    }

    public int[] MyArray
    {
        get; set;
    }
}

这将解决问题

于 2012-09-09T07:45:54.593 回答