0

ここのいくつかのコードは明確ではないことを私は知っています。私はまだ物事を試している最中です。3つの質問がありますが、リストに文字列を追加するとエラーが表示されるのはなぜですか?Class1のリストをメインクラスに渡すにはどうすればよいですか?そして、私の構文はList passArrで正しいですか?passArrの最後に括弧を追加する必要があるかどうかわかりません。

class Class1
{
    public static List<string> passArr
    {
        get;
        set;
    }

    public static void passIt()
    {
        passArr.Add("A"); //Error: Object reference not set to an instance of an object
    }
}

メインクラス

class Program
{
    static void Main(string[] args)
    {
        Class1.passIt();
        List<string> passArr1 = Class1.passArr;
        foreach (string s in passArr1)
        {
            Console.WriteLine(s);
        }
        Console.ReadLine();
    }
}
4

2 に答える 2

5

リストを作成することは決してないので、passArrプロパティ(ちなみに名前を変更する必要があります)の値は常にnull。です。次のようなものが必要です。

Class1.passArr = new List<string>();

ある時点で。もう1つの方法は、初期化子を使用してフィールドに裏打ちされた読み取り専用プロパティにすることです。

private static readonly List<string> passArr = new List<string>();
public static List<string> PassArr { get { return passArr; } }

(これは大文字と小文字の区別に関する命名規則に準拠していますが、もちろん意味のある名前ではありません。)

于 2012-12-13T08:30:34.790 に答える
0

答えてくれたJonSkeetとSayseに感謝します。これですべてが明らかになりました。本当の問題は、リストの新しいオブジェクトを作成せずに(passItメソッドを使用して)リストに何かを追加しようとしていることです。

これが私の新しいコードです:

メインクラス

class Program
{
    static void Main(string[] args)
    {
        Class1 cs = new Class1();
        cs.passIt();
        foreach (string s in cs.passArr)
        {
            Console.WriteLine("Inside main: " + s);
        }
        Console.ReadLine();
    }
}

クラス1

class Class1
{
    public List<string> passArr
    {
        get;
        set;
    }

    public void passIt()
    {
        passArr = new List<string>();
        passArr.Add("A");
    }
}
于 2012-12-13T09:11:08.470 に答える