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.
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);
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"));
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);
}
}
Une façon (en une ligne) de le faire est la suivante:
listemail.Add(new EmailData {FirstName = "John", LastName = "Smith", Location = "Los Angeles"});
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.
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);
Vous essayez d'appeler
Liste <EmailData> .Add (chaîne, chaîne, chaîne)
lstemail.add(new EmailData{ FirstName="John", LastName="Smith", Location="Los Angeles"});
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");
Comment vous attendez-vous List<EmailData>.Add
savoir comment transformer trois string
s 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"));
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" });
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 {.......}
};
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;
}
}
EmailData clsEmailData = new EmailData();
List<EmailData> lstemail = new List<EmailData>();
clsEmailData.FirstName="JOhn";
clsEmailData.LastName ="Smith";
clsEmailData.Location ="Los Angeles"
lstemail.add(clsEmailData);