我如何在课程列表中获取对象

时间:2018-10-22 15:17:57

标签: c#

我创建了课程

class TxtEmail
{
    public TxtEmail(string firtFirstmail, string domain)
    {
        this.Firstmail = firtFirstmail;
        this.Domain = domain;

    }

    public string Firstmail { get; set; }
    public string Domain { get; set; }


    public string RetOneString()
    {
        return Firstmail + "@" + Domain;
    }
}

然后我的班级添加到列表班级

     class EmailDP : List<TxtEmail>
{
    List<TxtEmail> txtemail = new List<TxtEmail>();
    public void Add(string path)
    {

        txtemail.Add(new TxtEmail("user1", "google.ru"));
        txtemail.Add(new TxtEmail("user5555", "google.com"));
        txtemail.Add(new TxtEmail("user252", "outlook.com"));
        txtemail.Add(new TxtEmail("user3", "gmail.com"));
    }
   another methods ......

但是后来我在类中创建对象,他显示0 Count,为什么?我在哪里犯错误以及如何在其中犯错?

EmailDP em1 = new EmailDP();
MessageBox.Show(em1.Count.ToString()); -> this show 0
foreach (var myob in em1)
{
    MessageBox.Show(myob.RetOneString());
}

3 个答案:

答案 0 :(得分:0)

您的EmailDP是-一个列表,也有一个-列表,我不认为您是说这两个都是对的。这是继承与构成的问题。您是否需要将班级设为列表,或者可以包含列表?

如果您希望您的班级成为一个List,那么在您的add方法中,您可以执行以下操作:

this.Add(new TxtEmail("user1", "google.ru")); ...

如果要让您的类包含-List,则可以删除List的继承

class EmailDP 
{
    ...

然后将您的列表公开,以便可以访问:

public List<TxtEmail> txtemail = new List<TxtEmail>();

然后从包含在其中的列表中获取计数:

MessageBox.Show(em1.textemail.Count.ToString()); 

希望有帮助。

答案 1 :(得分:0)

您涉及两个列表:

  1. EmailDP本身是从List<TxtEmail>派生的,因此是您要显示其计数的列表
  2. 您实际向其中添加项目的内部列表txtemail,而EmailDP本身为空。

更改您的类,使其封装内部列表。

class EmailDP
{
    private readonly List<TxtEmail> _txtemail = new List<TxtEmail>();

    public void Add(string path)
    {
        _txtemail.Add(new TxtEmail("user1", "google.ru"));
        _txtemail.Add(new TxtEmail("user5555", "google.com"));
        _txtemail.Add(new TxtEmail("user252", "outlook.com"));
        _txtemail.Add(new TxtEmail("user3", "gmail.com"));
    }

    public int Count => _txtemail.Count;

    public IEnumerable<TxtEmail> EmailTexts => _txtemail;

    // ... other methods
}

当然,您必须至少拨打一次Add ...

EmailDP em1 = new EmailDP();
em1.Add("some path");
em1.Add("another path");
MessageBox.Show(em1.Count.ToString());
foreach (var myob in em1.EmailTexts)
{
    MessageBox.Show(myob.RetOneString());
}

如果重写ToString而不是创建方法RetOneString,则具有TxtEmail对象将自动显示在多个位置的优点。即在调试器中,在列表框中或在Console.WriteLine中。

public override string ToString()
{
    return Firstmail + "@" + Domain;
}

答案 2 :(得分:-1)

您需要调用填充数组的Add方法。 也不要继承列表,因为您不需要这样做。

 EmailDP em1 = new EmailDP();
em1.Add(string.Empty);
    MessageBox.Show(em1.Count.ToString()); -> You will get items you added in the Add Method
    foreach (var myob in em1)
    {
        MessageBox.Show(myob.RetOneString());
    }