C# 使用foreach循环从数组中检索值
我已经使用我在使用foreach循环时创建的3个不同类向数组中添加了多个值我只从第一个类中获取值有没有办法在多个类上使用foreachC# 使用foreach循环从数组中检索值,c#,arrays,loops,foreach,C#,Arrays,Loops,Foreach,我已经使用我在使用foreach循环时创建的3个不同类向数组中添加了多个值我只从第一个类中获取值有没有办法在多个类上使用foreach AdvertDao advert = new AdvertDao(); var array = new ArrayList(); array = advert.fillAdvert(); foreach (Member m in array) { txtBoxEmail.Text = m.Email; txtBoxPhone.Text = m
AdvertDao advert = new AdvertDao();
var array = new ArrayList();
array = advert.fillAdvert();
foreach (Member m in array)
{
txtBoxEmail.Text = m.Email;
txtBoxPhone.Text = m.Phone.ToString();
txtBoxUsername.Text = m.Username;
}
foreach (Consoles c in array)
{
cmbConsole.Text = c.ConsoleName;
}
foreach (Advert a in array)
{
cmbGenre.Text = a.Genre;
lblDateStarted.Text = a.Date.ToString("dd/MM/yyyy");
txtBoxPrice.Text = a.Price.ToString();
txtBoxName.Text = a.Name;
txtBoxDesc.Text = a.Description;
}
fillAdvert()
方法:
public ArrayList fillAdvert()
{
Member member = new Member();
Advert advert = new Advert();
Consoles console = new Consoles();
Picture picture = new Picture();
ArrayList advertList = new ArrayList();
if (!DatabaseConnection.IsOpen)
{
DatabaseConnection.Open();
}
OracleCommand cmd = new OracleCommand();
cmd.Connection = DatabaseConnection.Connection;
string str = "SELECT * FROM ADVERT_ADPIC_MEMBER_CONSOLE WHERE username = '" + GlobalVariables.Username + "' AND name = '" + GlobalVariables.SellingName + "'";
cmd.CommandText = str;
OracleDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
member.Username = dr.GetString(0);
member.MemberID = dr.GetInt32(1);
member.Phone = dr.GetInt32(2);
member.Email = dr.GetString(3);
console.ConsoleName = dr.GetString(5);
advert.Description = dr.GetString(6);
advert.Genre = dr.GetString(7);
advert.Date = dr.GetDateTime(8);
advert.Price = dr.GetDouble(9);
advert.Name = dr.GetString(4);
advertList.Add(member);
advertList.Add(console);
advertList.Add(advert);
}
return advertList;
}
可能是一种更简单的方法,但这是他们希望在学院中完成的方式。foreach循环要求对象实现System.Collections.IEnumerable或System.Collections.Generic.IEnumerable接口 因此,答案是“不” 在foreach循环中没有一种直接的方法可以使用多个对象 如果让三个类实现同一个接口,可以使用接口和foreach循环。例:
public interface IInterface
{
string Text { get; }
}
然后,如果在每个类中实现此接口,则可以执行以下操作:
foreach (IInterface i in array)
{
//do whatever you want with the text here.
}
但是,您将只能使用在接口中实现的属性。
因此,如果根据对象需要“不同”的属性,除了必须在接口中实现所有必需的属性外,还必须在循环中使用某种类型的指示符和if或switch。您可以使用一个
foreach
块和object
作为元素类型,但是您需要检查元素的类型,将元素转换为正确的类型,并根据元素的类型实现逻辑
foreach (object obj in array)
{
if (obj is Member)
{
Member m = (Member)obj;
txtBoxEmail.Text = m.Email;
txtBoxPhone.Text = m.Phone.ToString();
txtBoxUsername.Text = m.Username;
}
else if (obj is Consoles)
{
Consoles c = (Consoles)obj;
cmbConsole.Text = c.ConsoleName;
}
else if (obj is Advert)
{
Advert a = (Advert)obj;
cmbGenre.Text = a.Genre;
lblDateStarted.Text = a.Date.ToString("dd/MM/yyyy");
txtBoxPrice.Text = a.Price.ToString();
txtBoxName.Text = a.Name;
txtBoxDesc.Text = a.Description;
}
}
与其使用三个类,为什么不只使用一个包含这三个类的所有属性的类呢?讲师希望数据库中的每个表都有不同的类,我问过我是否可以使用一个,但被告知它们需要分开。我知道使用一个
ArrayList
实现IEnumerable
,它会变得更容易,请参见此处:它实现了,但如果您有多个类型,则需要使用一个公共接口将其作为一个单独的对象使用。但我同意你答案中的“如果”选项可能最适合这个问题:)