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セクションが実行され、呼び出し元にnullが返されるため、プログラムは例外(null参照)を提供します。したがって、クラス(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 に答える