使用字段作为字符串数组设计类

时间:2015-06-22 15:40:41

标签: c# class

我不确定这是否是正确的标题,但这里就是。

我有一个包含许多字段的简单类和一个检查这些字段的方法。该课程如下所示。我删除了空间的访问器。

因此,我调用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
    }
}

3 个答案:

答案 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