web-dev-qa-db-ja.com

クラスを使用してリストにデータを保存する

次のクラスがあります。

public class EmailData
{
    public string FirstName{ set; get; }
    public string LastName { set; get; }
    public string Location{ set; get; }
}

その後、次のことを行いましたが、正常に動作していませんでした。

List<EmailData> lstemail = new List<EmailData>(); 
lstemail.Add("JOhn","Smith","Los Angeles");

メソッドのオーバーロードが3つの引数を取ることを示すメッセージが表示されます。

49
Nate Pet

同じ行にインスタンス化して追加する場合は、次のような操作を行う必要があります。

lstemail.Add(new EmailData { FirstName = "JOhn", LastName = "Smith", Location = "Los Angeles" });

または、事前にオブジェクトをインスタンス化し、次の場所に直接追加します。

EmailData data = new EmailData();
data.FirstName = "JOhn";
data.LastName = "Smith";
data.Location = "Los Angeles"

lstemail.Add(data);
73
slandau

クラスのインスタンスを追加する必要があります。

lstemail.Add(new EmailData { FirstName = "John", LastName = "Smith", Location = "Los Angeles"});

ただし、クラスにコンストラクタを追加することをお勧めします。

public class EmailData
{
    public EmailData(string firstName, string lastName, string location)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
        this.Location = location;
    }
    public string FirstName{ set; get; }
    public string LastName { set; get; }
    public string Location{ set; get; }
}

これにより、コンストラクタを使用してリストに追加を書き込むことができます。

lstemail.Add(new EmailData("John", "Smith", "Los Angeles"));
81
Reed Copsey

EmailDataのインスタンスを更新して、それを追加する必要があります。

var data = new EmailData { FirstName = "John", LastName = "Smith", Location = "LA" };

List<EmailData> listemail = new List<EmailData>();
listemail.Add(data);

できるようにしたい場合:

listemail.Add("JOhn","Smith","Los Angeles");

system.Collections.Generic.Listを特殊化し、独自のAddメソッドを実装することにより、独自のカスタムリストを作成できます。

public class EmailList : List<EmailData>
{
    public void Add(string firstName, string lastName, string location)
    {
        var data = new EmailData 
                   { 
                       FirstName = firstName, 
                       LastName = lastName,
                       Location = location
                   };
        this.Add(data);
    }
}
29

これを行う1つの方法(1行で)は次のようになります。

listemail.Add(new EmailData {FirstName = "John", LastName = "Smith", Location = "Los Angeles"});
15
TheBoyan

追加するクラスのインスタンスを作成する必要があります。

lstemail.Add(new EmailData
                 {
                     FirstName = "JOhn",
                     LastName = "Smith",
                     Location = "Los Angeles"
                 });

方法:オブジェクト初期化子を使用してオブジェクトを初期化する(C#プログラミングガイド) を参照してください


または、EmailDataオブジェクトのコンストラクタを宣言し、それを使用してインスタンスを作成できます。

13
George Duckett

クラスの新しいインスタンスをリストに追加するわけではありません。これを試して:

lstemail.Add(new EmailData { FirstName="John", LastName="Smith", Location="Los Angeles" });`

Listはジェネリッククラスです。 List<EmailData>を指定すると、AddメソッドはEmailData型のオブジェクトを予期します。より詳細な構文で表現された上記の例は次のようになります。

EmailData data = new EmailData();
data.FirstName="John";
data.LastName="Smith;
data.Location = "Los Angeles";
lstemail.Add(data);
8
Daniel Mann

電話をかけようとしています

List <EmailData> .Add(string、string、string)
lstemail.add(new EmailData{ FirstName="John", LastName="Smith", Location="Los Angeles"});
8
Tetsujin no Oni

拡張メソッドのバージョンは次のとおりです。

public static class ListOfEmailDataExtension
{
    public static void Add(this List<EmailData> list, 
        string firstName, string lastName, string location)
    {
        if (null == list)
            throw new NullReferenceException();

        var emailData = new EmailData
                            {
                                FirstName = firstName, 
                                LastName = lastName, 
                                Location = location
                            };
        list.Add(emailData);
    }
}

使用法:

List<EmailData> myList = new List<EmailData>();
myList.Add("Ron", "Klein", "Israel");
6
Ron Klein

List<EmailData>.Addが3つのstringsをEmailDataのインスタンスに変換する方法をどのように知ると期待しますか?あなたはフレームワークの多くを期待しています。 3つの文字列パラメーターを受け取るList<T>.Addのオーバーロードはありません。実際、List<T>.Addの唯一のオーバーロードはTを受け取ります。したがって、EmailDataのインスタンスを作成し、List<T>.Addに渡す必要があります。それが上記のコードが行うことです。

試してください:

lstemail.Add(new EmailData {
    FirstName = "JOhn", 
    LastName = "Smith",
    Location = "Los Angeles"
});

これは、C#オブジェクトの初期化構文を使用します。あるいは、コンストラクタをクラスに追加できます

public EmailData(string firstName, string lastName, string location) {
    this.FirstName = firstName;
    this.LastName = lastName;
    this.Location = location;
}

次に:

lstemail.Add(new EmailData("JOhn", "Smith", "Los Angeles"));
6
jason

この行はあなたの問題です:

lstemail.Add("JOhn","Smith","Los Angeles");

3つの文字列からカスタムクラスへの直接キャストはありません。コンパイラには、この行で何をしようとしているかを把握する方法がありません。 Add()クラスのインスタンスをlstemailにする必要があります。

lstemail.Add(new EmailData { FirstName = "JOhn", LastName = "Smith", Location = "Los Angeles" });
6
David

開始するいくつかの要素を含むリストを作成する場合:

var emailList = new List<EmailData>
{
   new EmailData { FirstName = "John", LastName = "Doe", Location = "Moscow" },
   new EmailData {.......}
};
2
Sunny Milenov
  public IEnumerable<CustInfo> SaveCustdata(CustInfo cust)
        {
            try
            {
                var customerinfo = new CustInfo
                {
                    Name = cust.Name,
                    AccountNo = cust.AccountNo,
                    Address = cust.Address
                };
                List<CustInfo> custlist = new List<CustInfo>();
                custlist.Add(customerinfo);
                return custlist;
            }
            catch (Exception)
            {
                return null;
            }
        }
1
user3364059
EmailData clsEmailData = new EmailData();
List<EmailData> lstemail = new List<EmailData>(); 

clsEmailData.FirstName="JOhn";
clsEmailData.LastName ="Smith";
clsEmailData.Location ="Los Angeles"

lstemail.add(clsEmailData);
0
Mayank Pandey