C# 无法将带[]的索引应用于类型为';方法组';封装数组

C# 无法将带[]的索引应用于类型为';方法组';封装数组,c#,.net,arrays,compiler-errors,C#,.net,Arrays,Compiler Errors,我正在构建这个简单的程序,但是我遇到了一些问题。我将一个数组封装到一个类中,并用随机数填充它。当我主要想使用Console.WriteLine()对其求值时,它会给出一个错误: 无法将带[]的索引应用于“方法组”类型的表达式 我做错了什么 class Program { public static void Main(string[] args) { Arrays randomArray = new Arrays(); Console.Write

我正在构建这个简单的程序,但是我遇到了一些问题。我将一个数组封装到一个类中,并用随机数填充它。当我主要想使用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();
        }
    }
}
类程序
{
公共静态void Main(字符串[]args)
{
数组randomArray=新数组();
WriteLine(“请输入一个整数!”);
int encryptionKey=Convert.ToInt32(Console.ReadLine());
randomArray.MyArray.SetValue(encryptionKey,0);
int i=0;
而(i<256)
{
Console.WriteLine(i+“”+randomArray.MyArray[i]);
i++;
}
Console.ReadLine();
}
公共静态int[]MakeArray()
{
随机rnd=新随机();
var值=可枚举范围(0,256)
.Select(x=>new{val=x,order=rnd.Next()})
.OrderBy(i=>i.order)
.选择(x=>x.val)
.ToArray();
返回值;
}
}
公共类数组
{
私有int[]_myArray;
公共int[]MyArray
{
得到
{
返回myArray;
}
设置
{
_myArray=Program.MakeArray();
}
}
}
首先,在线

randomArray.MyArray.SetValue(encryptionKey, 0);
程序会给您一个异常(null引用),因为在这一行中,MyArray的get部分将被执行,并将null返回给调用者。因此,您必须在类(数组)的构造函数中设置数组(MyArray)值,我认为这一部分在设计上是错误的

set 
        {
            _myArray = Program.MakeArray();
        } 
试试这个

public class Arrays
{
    public int[] _myArray;

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

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

这将解决问题

您知道您无法设置
MyArray
属性吗?每次您尝试分配某个内容时,都会生成一个全新的随机数组。您提供的代码在使用
System
System.Linq
指令添加
后编译时不会出现任何错误。感谢这一点,现在它可以工作了!我将MakeArray替换为value,并在Main put:Arrays randomArray=new Arrays();randomArray.MyArray=MakeArray();谢谢你,伙计,你太棒了。刚到C#我已经忙了好几个小时了。