Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用字段作为字符串数组设计类_C#_Class - Fatal编程技术网

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

C# 使用字段作为字符串数组设计类,c#,class,C#,Class,我不确定这是不是一个正确的标题,但现在开始 我有一个包含许多字段的简单类和一个检查这些字段的方法。这个班看起来像下面。我删除了访问器的空间 因此,我调用SetAlarms来设置字段,以便稍后与方法AlarmsOk()和其他方法一起使用。由于datatable只有一行,所以一切正常 现在datatable有两行。所以我想用一个结构数组来存储这两行。如果我继续使用类字段,我会将它们设置为数组,我需要初始化每个字符串,这意味着我需要添加100行,每个字段一行。另一方面,我可以有一个结构数组,并用一行初

我不确定这是不是一个正确的标题,但现在开始

我有一个包含许多字段的简单类和一个检查这些字段的方法。这个班看起来像下面。我删除了访问器的空间

因此,我调用SetAlarms来设置字段,以便稍后与方法AlarmsOk()和其他方法一起使用。由于datatable只有一行,所以一切正常

现在datatable有两行。所以我想用一个结构数组来存储这两行。如果我继续使用类字段,我会将它们设置为数组,我需要初始化每个字符串,这意味着我需要添加100行,每个字段一行。另一方面,我可以有一个结构数组,并用一行初始化它,长度为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
    }
}

您可以使用数组的数组:

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建议你把所有东西都塞进一张桌子里

我认为您应该有一个单一的
报警
类,而不是一个
报警
类。这将仅存储有关单个报警实体的信息。然后,不管实际有报警的对象是什么(比如a
Foo
),都会有一组
Alarm
对象,比如

public class Foo
{
    public List<Alarm> Alarms { get; set; }
}
公共类Foo
{
公共列表报警{get;set;}
}
在数据库端,您将有一个
Foo
表和一个
Alarm
表。您的
报警
表将有一个
FooID
列,因此您可以将每个列链接回
Foo