我想从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;
}
}
}
}
虽然工作正常但我想知道这种方法是否合适。
请帮助解决这个问题
谢谢
答案 0 :(得分:0)
我认为切换案例没问题,但是,添加default
标签并在那里抛出异常是个好主意。在向查询添加新列时,这将为您节省大量的调试工作。
答案 1 :(得分: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();
答案 2 :(得分:0)
如果您只想要这些值,您只需使用此行代码将DataRow作为对象数组
object[] itemArray = dr.ItemArray;