2016-07-08 24 views
0

私はC#で非常に単純なプロジェクトを持っていますが、私は進歩するにつれてエラーに遭遇して以来、あまりしていません。私はCUSTOMERというクラスを持っていて、数行のコードを含んでいます。式の型オブジェクトにインデックスを適用できません

public class Customer 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 


    public Customer(DataRow row) 
    { 
     this.FirstName = row["FirstName"].ToString(); 
    } 


    public List<Customer> GetCustomer() 
    { 
     List<Customer> c=new List<Customer>(); 
     DataTable dt=new DataTable(); 
     Dal.GetDataTable(dt, "select * from customer"); 
     foreach (var row in dt.Rows) 
     { 
      c.Add(new Customer(row["FirstName"])); //Error here 
     } 
     return c; 
    } 
} 

このコードは、私は信じて非常に簡単です、私はDataTableから顧客のリストを取得したいです。コンパイラによると:

は[]型の表現に「オブジェクト」でインデックスを適用することはできません

ありがとうございました。

+0

あなたが二回あなたの行のうち、 'FirstName'列を引くしようとしている、そしてそのは私が、悲しいを助けるため – Jonesopolis

答えて

2

あなたのエラーはここにある:

foreach (var row in dt.Rows) 
{ 
    c.Add(new Customer(row["FirstName"])); 
} 

あなたはコンストラクタを一致するように変更する必要があります。

foreach (DataRow row in dt.Rows) 
{ 
    c.Add(new Customer(row)); 
} 

あなたのコンストラクタはDataRowを受け入れ、あなたが行ではなく、オブジェクトを(渡す必要がありますrow["FirstName"]は、現在の行の値がFirstNameであるオブジェクトを返します)。あなたはまた、暗黙のうちにforeachの変数(DataRow row in dt.Rows)のタイプを指定する必要が

+0

感謝をあなたのタイプをオフに投げますそれはうまくいきません。 https://s32.postimg.org/p0vb589g5/Untitled.png –

+0

@DikongPrigmは 'var row'を' DataRow row'に変更するだけです – user3185569

関連する問題