C# 使用字段作为字符串数组设计类
我不确定这是不是一个正确的标题,但现在开始 我有一个包含许多字段的简单类和一个检查这些字段的方法。这个班看起来像下面。我删除了访问器的空间 因此,我调用SetAlarms来设置字段,以便稍后与方法AlarmsOk()和其他方法一起使用。由于datatable只有一行,所以一切正常 现在datatable有两行。所以我想用一个结构数组来存储这两行。如果我继续使用类字段,我会将它们设置为数组,我需要初始化每个字符串,这意味着我需要添加100行,每个字段一行。另一方面,我可以有一个结构数组,并用一行初始化它,长度为2 这是正确的吗C# 使用字段作为字符串数组设计类,c#,class,C#,Class,我不确定这是不是一个正确的标题,但现在开始 我有一个包含许多字段的简单类和一个检查这些字段的方法。这个班看起来像下面。我删除了访问器的空间 因此,我调用SetAlarms来设置字段,以便稍后与方法AlarmsOk()和其他方法一起使用。由于datatable只有一行,所以一切正常 现在datatable有两行。所以我想用一个结构数组来存储这两行。如果我继续使用类字段,我会将它们设置为数组,我需要初始化每个字符串,这意味着我需要添加100行,每个字段一行。另一方面,我可以有一个结构数组,并用一行初
public class Alarms
{
private string[] alarm0;
private string[] alarm1;
// to Alarm99
private string[] alarm99;
public void SetAlarms(DataTable AlarmsTable)
{
int currentRow = 0;
int rowCount = AlarmsTable.Rows.Count; //AlarmsTable has 2 rows
alarm0 = new string[rowCount];
alarm1 = new string[rowCount];
// to Alarm99
alarm99 = new string[rowCount];
foreach (DataRow row in AlarmsTable.Rows)
alarm0[currentRow] = Convert.ToString(AlarmsTable.Rows[currentRow]["Alarm0"]);
alarm1[currentRow] = Convert.ToString(AlarmsTable.Rows[currentRow]["Alarm1"]);
// to Alarm99
alarm99[currentRow] = Convert.ToString(AlarmsTable.Rows[currentRow]["Alarm99"]);
currentRow++;
}
}
public bool AlarmsOk()
{
//Check if alarms are OK, return true/false
}
}
您可以使用数组的数组:
private string[][] alarm;
并使用它:
alarm[0][currentRow] = value;
如果我理解正确,我宁愿使用一些
AlarmData
类和列表来代替:
public class AlarmData
{
public string Alarm0 { get; set; }
...
public string Alarm99 { get; set; }
}
public class Alarms
{
private List<AlarmData> alarmData = new List<AlarmData>();
public void SetAlarms(DataTable AlarmsTable)
{
this.alarmData.Clear();
foreach (DataRow row in AlarmsTable.Rows)
{
var newData = new AlarmData();
newData.Alarm0 = Convert.ToString(AlarmsTable.Rows[currentRow]["Alarm0"]);
...
newData.Alarm99 = Convert.ToString(AlarmsTable.Rows[currentRow]["Alarm99"]);
this.alarmData.Add(newData);
}
}
public bool AlarmsOk()
{
//Check if alarms are OK, return true/false
}
}
公共类报警数据
{
公共字符串Alarm0{get;set;}
...
公共字符串Alarm99{get;set;}
}
公共类警报
{
私有列表alarmData=新列表();
公共无效设置报警(DataTable AlarmsTable)
{
此参数为.alarmData.Clear();
foreach(AlarmsTable.Rows中的DataRow行)
{
var newData=新的AlarmData();
newData.Alarm0=Convert.ToString(AlarmsTable.Rows[currentRow][“Alarm0”]);
...
newData.Alarm99=Convert.ToString(AlarmsTable.Rows[currentRow][“Alarm99”]);
this.alarmData.Add(newData);
}
}
公共bool AlarmsOk()
{
//检查报警是否正常,返回真/假
}
}
因此,您有一个与表相对应的类(以及列表中每行的一个实例),这在我看来更容易阅读。这似乎是一个糟糕的设计。你的OP建议你把所有东西都塞进一张桌子里
我认为您应该有一个单一的报警
类,而不是一个报警
类。这将仅存储有关单个报警实体的信息。然后,不管实际有报警的对象是什么(比如aFoo
),都会有一组Alarm
对象,比如
public class Foo
{
public List<Alarm> Alarms { get; set; }
}
公共类Foo
{
公共列表报警{get;set;}
}
在数据库端,您将有一个Foo
表和一个Alarm
表。您的报警
表将有一个FooID
列,因此您可以将每个列链接回Foo