我不确定这是否是正确的标题,但这里就是。
我有一个包含许多字段的简单类和一个检查这些字段的方法。该课程如下所示。我删除了空间的访问器。
因此,我调用SetAlarms来设置字段,以便稍后使用方法AlarmsOk()和其他方法。一切都运行正常,因为数据表只有一行。
现在数据表有两行。所以我在考虑使用struct数组来存储这两行。如果我继续使用类字段,我会将它们设置为我需要初始化每个字符串的数组,这意味着我需要添加100行,每个字段一个。另一方面,我可以有一个struct数组,用一行初始化两个长度为2的长度。
这是对的吗?
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
}
}
答案 0 :(得分:2)
如果我理解正确,我宁愿使用一些AlarmData
类和一个List
代替:
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
}
}
所以你有一个对应于你的表的类(以及每行列表中的一个实例),这更容易阅读IMO。
答案 1 :(得分:0)
您可以使用数组:
private string[][] alarm;
并使用它:
alarm[0][currentRow] = value;
答案 2 :(得分:0)
这对我来说似乎是糟糕的设计。你的OP建议你把所有东西都塞进一张桌子里。
我认为你应该有一个单独的Alarms
类,而不是一个Alarm
类。这将仅存储有关单个警报实体的信息。然后无论实际上有什么对象的警报(比如Foo
)都会有Alarm
个对象的集合 - 所以类似
public class Foo
{
public List<Alarm> Alarms { get; set; }
}
在数据库端,您将拥有Foo
表和Alarm
表。您的Alarm
表格会有FooID
列,因此您可以将每个列链接回Foo
。