Хранение данных в список с классом
У меня есть следующий класс:
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 аргумента.
Ответы
Ответ 1
Если вы хотите создать экземпляр и добавить в ту же строку, вам нужно сделать что-то вроде этого:
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);
Ответ 2
Вам нужно добавить экземпляр класса:
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"));
Ответ 3
Вам нужно обновить экземпляр 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);
}
}
Ответ 4
Один способ (в одной строке) сделать это так:
listemail.Add(new EmailData {FirstName = "John", LastName = "Smith", Location = "Los Angeles"});
Ответ 5
Вам нужно создать экземпляр добавляемого класса:
lstemail.Add(new EmailData
{
FirstName = "JOhn",
LastName = "Smith",
Location = "Los Angeles"
});
См. Практическое руководство. Инициализация объектов с помощью инициализатора объектов (руководство по программированию на С#)
В качестве альтернативы вы можете объявить конструктор для объекта EmailData
и использовать его для создания экземпляра.
Ответ 6
Вы не добавляете в список новый экземпляр класса. Попробуйте следующее:
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);
Ответ 7
Вы пытаетесь вызвать
Список < EmailData>.Add(строка, строка, строка)
. Попробуйте следующее:
lstemail.add(new EmailData{ FirstName="John", LastName="Smith", Location="Los Angeles"});
Ответ 8
Как вы ожидаете, что List<EmailData>.Add
знает, как превратить три string
в экземпляр EmailData
? Вы ожидаете слишком много из Framework. Нет перегрузки List<T>.Add
, который принимает три строковых параметра. Фактически, единственная перегрузка List<T>.Add
принимает значение a T
. Поэтому вам нужно создать экземпляр EmailData
и передать его на List<T>.Add
. Это то, что делает вышеуказанный код.
Try:
lstemail.Add(new EmailData {
FirstName = "JOhn",
LastName = "Smith",
Location = "Los Angeles"
});
В этом случае используется синтаксис инициализации объекта С#. Кроме того, вы можете добавить конструктор в свой класс
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"));
Ответ 9
Эта строка является вашей проблемой:
lstemail.Add("JOhn","Smith","Los Angeles");
В ваш пользовательский класс нет прямой трансляции из 3 строк. Компилятор не может понять, что вы пытаетесь сделать с этой линией. Вам нужно Add()
экземпляр класса lstemail
:
lstemail.Add(new EmailData { FirstName = "JOhn", LastName = "Smith", Location = "Los Angeles" });
Ответ 10
Здесь версия метода расширения:
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");
Ответ 11
И если вы хотите создать список с некоторыми элементами, чтобы начать с:
var emailList = new List<EmailData>
{
new EmailData { FirstName = "John", LastName = "Doe", Location = "Moscow" },
new EmailData {.......}
};
Ответ 12
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;
}
}
Ответ 13
EmailData clsEmailData = new EmailData();
List<EmailData> lstemail = new List<EmailData>();
clsEmailData.FirstName="JOhn";
clsEmailData.LastName ="Smith";
clsEmailData.Location ="Los Angeles"
lstemail.add(clsEmailData);