2017-06-28 9 views
0

何が間違っていますか?クラスのプロパティ内でListコレクションを持っているときにC#Listでデータを追加できません

  1. 予約リスト(他のクラス)をインスタンス化する必要がありますか?

    clsP.Books = new List<Book>(); 
    
  2. これは私がlinqpad

    でエラーを取得するラインである 'UserQuery.Book' 3つの引数

    var book1 = new Book("Neuromancer", "William Gibson", "Science Fiction"); 
    

を取るコンストラクタが含まれていませんこれは完全なコードですが、何が問題なのですか?

void Main() 
{  
    var clsPList = new List<clsPerson>();  
    var clsP = new clsPerson(); 
    clsP.FirstName = "jack"; 
    clsP.LastName = "barker"; 
    clsP.Gender = "male";  

    //clsP.Books = new List<Book>(); 
    var book1 = new Book("Neuromancer", "William Gibson", "Science Fiction"); 

    clsP.Books.Add(book1); 
    clsPList.Add(clsP);   
    clsPList.Dump();       
} 

public class clsPerson 
{ 
    public string FirstName; 
    public string LastName; 
    public string Gender; 
    public List<Book> Books = new List<Book>(); 
} 

public class Book 
{ 
    public string Title; 
    public string Author; 
    public string Genre;   
} 
+2

ブッククラスには、引数がゼロのデフォルトコンストラクタしかありません。 –

+0

これは引数を取るコンストラクタを持っていないので、clsPersonオブジェクトと同じようにプロパティを初期化するだけです。 –

答えて

5

エラーは正しいです。あなたが...有効なコンストラクタで

public class Book 
{ 
    public Book(string title, string author, string genre) 
    { 
     Title = title; 
     Author = author; 
     Genre = genre; 
    } 

    public string Title; 
    public string Author; 
    public string Genre; 
} 

Bookを提供...あるいは単に直接プロパティに割り当てる必要があるのいずれかのエラーが言う

var book1 = new Book { 
         Title = "Neuromancer", 
         Author = "William Gibson", 
         Genre = "Science Fiction" 
        }; 
+1

また、 'clsPerson'クラスのように、クラス構築の後にプロパティを割り当てます。 –

+0

メソッドの戻り値は –

+0

でなければなりません。 'public Book(string title、string author、string genre)' –

0

とおりに、ブックはありません。 3つの引数を取るコンストラクタ。 オプションは、インラインでプロパティをインスタンス化するか、

var book1 = new Book() 
{ 
    Title = "Neuromancer", 
    Author = "William Gibson", 
    Genre "Science Fiction" 
}; 

または、たとえば図のコンストラクタを宣言します。

public class Book 
{ 
    public string Title; 
    public string Author; 
    public string Genre; 

    public Book (string title, string author, string genre) 
    { 
     Title = title; 
     Author = author; 
     Genre = genre; 
    }  
} 
0

私はこの場合、書籍の一覧(他のクラス)

をインスタンス必要ですあなたは空のリストでBooksフィールドを初期化するので、あなたは、それを必要としない:

public List<Book> Books = new List<Book>(); 

この割り当てフィールドがないと、デフォルト値nullで初期化されます。

リストは、私はあなたがあなたのBookクラス内の任意のコンストラクタを指定していないエラー

を得るラインです。したがって、デフォルトのパラメータなしコンストラクタのみが利用可能です。どちらの使用目的のinitialzer:

var book1 = new Book { 
    Title = "Neuromancer", 
    Author = "William Gibson", 
    Genre = "Science Fiction" 
    }; 

または作成コンストラクタ三つのパラメータとし、その後、あなたのコードが

public class Book 
{ 
    public Book(string title, string author, string genre) 
    { 
     Title = title; 
     Author = author; 
     Genre = genre; 
    } 

    public string Title; 
    public string Author; 
    public string Genre;   
} 

つ以上のノートエラーなしでコンパイルされます - それはプロパティの代わりに公共の場のを使用することをお勧めします:

public string Title { get; set; } 
+0

パブリックフィールドからこのようなプロパティに変更すると 'public string Title {get; set;} 'Bookコンストラクタも変更できますか? –

関連する問題