ti-enxame.com

Armazenando dados na lista com classe

Eu tenho a seguinte classe:

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

Fiz o seguinte, mas não estava funcionando corretamente:

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

Recebo uma mensagem que diz que nenhuma sobrecarga para o método leva 3 argumentos.

49
Nate Pet

Se você deseja instanciar e adicionar a mesma linha, precisará fazer algo assim:

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

ou apenas instanciar o objeto antes e adicioná-lo diretamente em:

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

lstemail.Add(data);
73
slandau

Você precisa adicionar uma instância da classe:

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

Eu recomendaria adicionar um construtor à sua classe, no entanto:

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

Isso permitiria que você escrevesse a adição à sua lista usando o construtor:

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

Você precisa criar uma instância nova do EmailData e adicionar:

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

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

Se você deseja fazer:

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

você pode criar sua própria lista personalizada, especializando System.Collections.Generic.List e implementando seu próprio método Add, mais ou menos assim:

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

Uma maneira (em uma linha) de fazer isso é assim:

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

Você precisa criar uma instância da classe para adicionar:

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

Consulte Como: Inicializar Objetos Usando um Inicializador de Objetos (Guia de Programação em C #)


Como alternativa, você pode declarar um construtor para o objeto EmailData e usá-lo para criar a instância.

13
George Duckett

Você não está adicionando uma nova instância da classe à lista. Tente o seguinte:

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

List é uma classe genérica. Quando você especifica um List<EmailData>, o método Add espera um objeto do tipo EmailData. O exemplo acima, expresso em uma sintaxe mais detalhada, seria:

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

Você está tentando ligar

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

Aqui está a versão do método de extensão:

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

Uso:

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

Como você espera que _List<EmailData>.Add_ saiba como transformar três strings em uma instância de EmailData? Você está esperando muito do Framework. Não há sobrecarga de _List<T>.Add_ que aceita três parâmetros de sequência. De fato, a única sobrecarga de _List<T>.Add_ leva um T. Portanto, você deve criar uma instância de EmailData e passar isso para _List<T>.Add_. É isso que o código acima faz.

Experimentar:

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

Isso usa a sintaxe de inicialização do objeto C #. Como alternativa, você pode adicionar um construtor à sua classe

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

Então:

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

Esta linha é seu problema:

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

Não há conversão direta de três seqüências para sua classe personalizada. O compilador não tem como descobrir o que você está tentando fazer com esta linha. Você precisa Add() uma instância da classe para lstemail:

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

E se você deseja criar a lista com alguns elementos para começar:

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