0

我想从 DataRow 对象创建一个对象。它可以通过遍历 Datarow 对象来完成。但这里的约束是 DataRow 列不固定。DataRow 可以拥有的列数可能会有所不同。我无法根据 ColumnName 遍历 DataRow,因为我不知道哪些列将在 datarow 中。

例如我有一堂课

class Abc
{
    string attrib1;
    string attrib2;
    string attrib2;

    public Abc(DataRow dr)
    {
        attrib1 = dr["attrib1"].ToString();
        attrib2 = dr["attrib2"].ToString();
        attrib3 = dr["attrib3"].ToString();
    }
}

当 DataRow 对象具有所有三列时,这将正常工作。但如果不是,那么这将引发异常

请帮我。

我尝试在构造函数中使用 switch case,如下所示

class Abc
{
    string attrib1;
    string attrib2;
    string attrib2;

    public Abc(DataRow dr)
    {
         foreach (System.Data.DataColumn dc in record.Columns)
             {
                  switch (dc.ColumnName)
                  { 
                case "attrib1" :
                    attrib1 = dr["attrib1"].ToString();
                    break;
                case "attrib2" :
                    attrib2 = dr["attrib2"].ToString();
                    break;
                case "attrib2" :
                    attrib3 = dr["attrib3"].ToString();
                    break;
            } 
                  }  
           } 
     }      

虽然它工作正常,但我想知道这种方法是否很好。

请帮助解决这个问题

谢谢你

4

3 回答 3

0

default我认为开关盒没问题,但是,添加标签并在那里抛出异常是个好主意。当您向查询添加新列时,这将为您节省大量调试工作。

于 2012-05-10T07:46:20.823 回答
0

算法不好。

1-请将您的“attrib1”、“attrib2”、“attrib3”设为常量。

2-请看伪代码:

if (dr[CONSTANT_ATT1] != null) then attrib1 = dr[CONSTANT_ATT1].ToString();
if (dr[CONSTANT_ATT2] != null) then attrib2 = dr[CONSTANT_ATT2].ToString();
if (dr[CONSTANT_ATT3] != null) then attrib3 = dr[CONSTANT_ATT3].ToString();
于 2012-05-10T07:49:17.140 回答
0

如果您只想要这些值,您可以使用这行代码简单地将 DataRow 作为对象数组获取

object[] itemArray = dr.ItemArray;
于 2012-05-10T08:04:08.033 回答