使用类将数据存储到列表中

Nat*_*Pet 51 .net c# list

我有以下课程:

public class EmailData
{
    public string FirstName{ set; get; }
    public string LastName { set; get; }
    public string Location{ set; get; }
}
Run Code Online (Sandbox Code Playgroud)

然后我做了以下但是没有正常工作:

List<EmailData> lstemail = new List<EmailData>(); 
lstemail.Add("JOhn","Smith","Los Angeles");
Run Code Online (Sandbox Code Playgroud)

我收到一条消息,说没有方法的重载需要3个参数.

Ree*_*sey 82

您需要添加该类的实例:

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

我建议在你的类中添加一个构造函数,但是:

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; }
}
Run Code Online (Sandbox Code Playgroud)

这将允许您使用构造函数将添加内容写入列表:

lstemail.Add(new EmailData("John", "Smith", "Los Angeles"));
Run Code Online (Sandbox Code Playgroud)

  • @JohnBubriski对于没有名称或位置的`EmailData`类(在本例中),它不太可能有有效含义.使用默认构造函数将允许用户无意中创建处于无效状态的类.只要有可能,强制构造函数包含所有必需的数据以将对象初始化为有意义的状态总是一个好主意,因为这样可以防止错误随着时间的推移而发生. (5认同)

sla*_*dau 74

如果要实例化并添加到同一行,则必须执行以下操作:

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

或者只是事先实例化对象,并将其直接添加到:

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

lstemail.Add(data);
Run Code Online (Sandbox Code Playgroud)


Chr*_*dal 29

您需要新建一个EmailData实例,然后添加:

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

List<EmailData> listemail = new List<EmailData>();
listemail.Add(data);
Run Code Online (Sandbox Code Playgroud)

如果你想做到:

listemail.Add("JOhn","Smith","Los Angeles");
Run Code Online (Sandbox Code Playgroud)

您可以创建自己的自定义列表,通过专门化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);
    }
}
Run Code Online (Sandbox Code Playgroud)


The*_*yan 15

一种方式(在一行中)是这样的:

listemail.Add(new EmailData {FirstName = "John", LastName = "Smith", Location = "Los Angeles"});
Run Code Online (Sandbox Code Playgroud)


Geo*_*ett 13

您需要创建要添加的类的实例:

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

请参见如何:使用对象初始化程序初始化对象(C#编程指南)


或者,您可以为EmailData对象声明构造函数并使用它来创建实例.


Dan*_*ann 8

您没有在列表中添加该类的新实例.试试这个:

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

List是一个通用类.指定a时List<EmailData>,该Add方法期望一个类型为的对象EmailData.以更详细的语法表达的上述示例将是:

EmailData data = new EmailData();
data.FirstName="John";
data.LastName="Smith;
data.Location = "Los Angeles";
lstemail.Add(data);
Run Code Online (Sandbox Code Playgroud)


Tet*_*Oni 8

你正试图打电话

列表<EmailData>.新增(字符串,字符串,字符串)
.试试这个:

lstemail.add(new EmailData{ FirstName="John", LastName="Smith", Location="Los Angeles"});
Run Code Online (Sandbox Code Playgroud)


jas*_*son 6

您如何期望List<EmailData>.Add知道如何将三个strings变成一个实例EmailData?你期待太多的框架.没有重载List<T>.Add需要三个字符串参数.事实上,唯一超载的List<T>.AddT.因此,您必须创建一个实例EmailData并将其传递给List<T>.Add.这就是上面的代码所做的.

尝试:

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

这使用C#对象初始化语法.或者,您可以向类中添加构造函数

public EmailData(string firstName, string lastName, string location) {
    this.FirstName = firstName;
    this.LastName = lastName;
    this.Location = location;
}
Run Code Online (Sandbox Code Playgroud)

然后:

lstemail.Add(new EmailData("JOhn", "Smith", "Los Angeles"));
Run Code Online (Sandbox Code Playgroud)


Dav*_*vid 6

这行是你的问题:

lstemail.Add("JOhn","Smith","Los Angeles");
Run Code Online (Sandbox Code Playgroud)

从3个字符串到您的自定义类没有直接强制转换.编译器无法弄清楚你要用这条线做什么.您需要Add()该类的实例lstemail:

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


Ron*_*ein 6

这是扩展方法版本:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

List<EmailData> myList = new List<EmailData>();
myList.Add("Ron", "Klein", "Israel");
Run Code Online (Sandbox Code Playgroud)