我有下面的代码将数据作为子类中的数据表获取。然后在foreach语句中使用某些if条件对数据进行排序。当满足if语句中的条件时,我需要通知订户这些更改。但是,如果一个条件在foreach语句中遇到,它会通知订阅者。然后,它在循环第一行后不会返回到循环。有谁知道该怎么做?
public class Data
{
public string ID { get; set; }
public string Description { get; set; }
}
public delegate void LogHandler(Data log);
public class ClsSub
{
public event LogHandler OnDataRetrieved;
public void LoadData()
{
DataTable dt = GetData();
foreach (DataRow row in dt.Rows)
{
Data logdata = new Data();
if (row["Description"].ToString().Contains("User found"))
{
logdata.ID = row["UserID"].ToString();
logdata.Description = row["Description"].ToString();
}
if (row["Description"].ToString().Contains("User not found"))
{
logdata.ID = row["UserID"].ToString();
logdata.Description = row["Description"].ToString();
}
if (OnDataRetrieved != null)
{
OnDataRetrieved(logdata);
}
}
}
private DataTable GetData()
{
var result = new DataTable();
result.Columns.Add("UserID", typeof(string));
result.Columns.Add("Description", typeof(string));
result.Rows.Add("user1", "description1");
result.Rows.Add("user2", "description2");
return result;
}
}
public class ClsMain
{
public event LogHandler OnDataRetrieved;
public void ReadData()
{
ClsSub sub = new ClsSub();
sub.OnDataRetrieved += OnDataRetrieved;
sub.LoadData();
}
}
public class Program
{
static void Main(string[] args)
{
ClsMain main = new ClsMain();
main.OnDataRetrieved += ClsApplication_OnDataRetrieved;
main.ReadData();
Console.ReadKey();
}
private static void ClsApplication_OnDataRetrieved(Data log)
{
Console.WriteLine(log.ID + " " + log.Description);
}
}