从相关DataTable中对typeof进行编程定义

时间:2014-01-19 19:43:58

标签: c# loops datatable typeof

朋友们,我正在构建一个简单的foreach循环,它从DataTable(tblCORR)获取信息,并用它创建3个其他DT(tblCEMVALVE,tblLOG,tblNUMBER)。需要注意的是,它必须根据tblCORR中提供的内容使用不同的列类型,但当然typeof不允许使用row.ItemArray [2]作为类型。

tblCORR看起来像这样:

LAS.V342.B.REM.ST   V342_REM    bool    tblLOG      tblVALVE
CEM.CV44.B.REM.ST   CV44_REM    bool    tblCEMVALVE tblVALVE
CEM.FRT01.PTO06.ST  FR_PTO06    bool    tblLOG      tblSTATUS
CEM.GB02.GEAR.CTR   RR_GEAR_SEL byte    tblLOG      tblSTATUS
CEM.PT21.I_PRES.PSI PT21_PRESS  Short   tblNUMBER   tblDATA
RCP.ADD1.NAME.TXT   LAS_ADD1    string  tblNUMBER   tblLAS

有没有办法在不必在每种情况下放置一堆IF?

提前致谢!

foreach (DataRow row in tblCORR.Rows)
{
    switch (row.ItemArray[3].ToString())
    {
        case "tblCEMVALVE":
        {
            tblCEMVALVE.Columns.Add(row.ItemArray[1].ToString(), typeof(row.ItemArray[2]));
            break;
        }
        case "tblLOG":
        {
            tblLOG.Columns.Add(row.ItemArray[1].ToString(), typeof(row.ItemArray[2]));
            break;
        }
        case "tblNUMBER":
        {
            tblNUMBER.Columns.Add(row.ItemArray[1].ToString(), typeof(row.ItemArray[2]));
            break;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

使用该类型名称(它们不是System命名空间中的类/结构的名称),一种可能的解决方案是使用Dictionary。例如(用于说明目的的详细代码):

Dictionary<object, Type> knownTypes = new Dictionary<object, Type>();
knownTypes.Add("bool", typeof(bool));
knownTypes.Add("byte", typeof(byte));
knownTypes.Add("Short", typeof(short));
knownTypes.Add("string", typeof(string));

用作:

tblLOG.Columns.Add(row.ItemArray[1].ToString(), knownTypes[row.ItemArray[2]]);

您可能/应该考虑的一些更改:

  • 将词典设为staticprivate班级成员。
  • 使用键入的字典键(使用row.ItemArray[2].ToString())。
  • 对字典键使用不区分大小写的比较器StringComparer.InvariantCultureIgnoreCase(如果string),shortShort将是等效的。
  • 也可以对表格使用类似的技术(tblLOGtblNUMBERtblCEMVALVE)或直接使用TableName DataSet内的{{1}}进行搜索。