我创建了课程
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());
}
答案 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)
您涉及两个列表:
EmailDP
本身是从List<TxtEmail>
派生的,因此是您要显示其计数的列表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());
}