web-dev-qa-db-fra.com

Stockage des données dans la liste avec la classe

J'ai la classe suivante:

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

J'ai ensuite fait ce qui suit mais je ne fonctionnais pas correctement:

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

Je reçois un message qui dit que pas de surcharge pour la méthode prend 3 arguments.

49
Nate Pet

Si vous voulez instancier et ajouter dans la même ligne, vous devez faire quelque chose comme ceci:

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

ou simplement instancier l'objet antérieur, et l'ajouter directement dans:

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

lstemail.Add(data);
73
slandau

Vous devez ajouter une instance de la classe:

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

Je recommanderais d'ajouter un constructeur à votre classe, cependant:

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; }
}

Cela vous permettrait d'écrire l'ajout à votre liste en utilisant le constructeur:

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

Vous devez créer une instance de EmailData, puis ajouter que:

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

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

Si vous voulez pouvoir faire:

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

vous pouvez créer votre propre liste personnalisée, en spécialisant System.Collections.Generic.List et en implémentant votre propre méthode Add, plus ou moins comme ceci:

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
Christian Horsdal

Une façon (en une ligne) de le faire est la suivante:

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

Vous devez créer une instance de la classe à ajouter:

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

Voir Comment: initialiser des objets à l'aide d'un initialiseur d'objet (Guide de programmation C #)


Vous pouvez également déclarer un constructeur pour vous EmailData object et l'utiliser pour créer l'instance.

13
George Duckett

Vous n’ajoutez pas une nouvelle instance de la classe à la liste. Essaye ça:

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

List est une classe générique. Lorsque vous spécifiez un List<EmailData>, la méthode Add attend un objet de type EmailData. L'exemple ci-dessus, exprimé dans une syntaxe plus détaillée, serait:

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

Vous essayez d'appeler

Liste <EmailData> .Add (chaîne, chaîne, chaîne)
lstemail.add(new EmailData{ FirstName="John", LastName="Smith", Location="Los Angeles"});
8
Tetsujin no Oni

Voici la version de la méthode d'extension:

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);
    }
}

Usage:

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

Comment vous attendez-vous List<EmailData>.Add savoir comment transformer trois strings en une instance de EmailData? Vous attendez trop du cadre. Il n'y a pas de surcharge de List<T>.Add qui prend trois paramètres de chaîne. En fait, la seule surcharge de List<T>.Add prend dans un T. Par conséquent, vous devez créer une instance de EmailData et la transmettre à List<T>.Add. C'est ce que le code ci-dessus fait.

Essayer:

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

Ceci utilise la syntaxe d'initialisation d'objet C #. Alternativement, vous pouvez ajouter un constructeur à votre classe

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

Ensuite:

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

Cette ligne est votre problème:

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

Il n'y a pas de conversion directe de 3 chaînes dans votre classe personnalisée. Le compilateur n'a aucun moyen de comprendre ce que vous essayez de faire avec cette ligne. Vous devez Add() une instance de la classe pour lstemail:

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

Et si vous voulez créer la liste avec quelques éléments pour commencer:

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