解析C中的对象数组#

问题描述:

我有一个对象数组,我想将它传递给只接受DOUBLENULLSTRINGDATETIME的方法。所以当我尝试传递值时,它会给出一个错误,说我不能传入任何任意对象,并且必须首先将其解析为DOUBLENULLSTRINGDATETIME解析C中的对象数组#

foreach (var currRow in dataSet.Tables[0].Rows) 
{ 
    var tuple = Com.Tibco.As.Space.Tuple.Create(); 

    //here is where i loop through the object array 
    for (int i = 0; i < currRow.Values.Length; i++) 
    { 
     //here is where i try to pass it to the method (which doesn't accept it) 
     tuple.Put(dataSet.Tables[0].ColumnNames[i], currRow.Values[i]); 
    } 

    inSpace_.Put(tuple); 
} 

Heres what the array of objects look like

总之我需要一种方法来分析每个对象,并强制转换为相应的一个,然后把它放在里面的元组。

编辑

这里就是我试图做的,但它没有工作:

foreach (var currRow in dataSet.Tables[0].Rows) 
{ 
    var tuple = Com.Tibco.As.Space.Tuple.Create(); 

    for (int i = 0; i < currRow.Values.Length; i++) 
    { 
     if (currRow.Values[i] != null) 
     { 
      if (dataSet.Tables[0].ColumnNames[i].GetType().IsEquivalentTo(typeof(DateTime))) 
      { 
       DateTime value = DateTime.Parse(dataSet.Tables[0].ColumnNames[i].ToString()); 
       tuple.Put(dataSet.Tables[0].ColumnNames[i], value); 
      } 
      else if (dataSet.Tables[0].ColumnNames[i].GetType().IsEquivalentTo(typeof(Double))) 
      { 
       Double value = Convert.ToDouble(dataSet.Tables[0].ColumnNames[i]); 
       tuple.Put(dataSet.Tables[0].ColumnNames[i], value); 
      } 
      else 
      { 
       string value = dataSet.Tables[0].ColumnNames[i].ToString(); 
       tuple.Put(dataSet.Tables[0].ColumnNames[i], value); 
      } 
     } 
    } 
    inSpace_.Put(tuple); 
} 

foreach (var currRow in dataSet.Tables[0].Rows) 
{ 
    var tuple = Com.Tibco.As.Space.Tuple.Create(); 

    for (int i = 0; i < currRow.Values.Length; i++) 
    { 
     var obj = dataSet.Tables[0].ColumnNames[i], currRow.Values[i]; 
     var value = null; 
     value = obj as double; 
     if (!validObject(value)) value as string; 
     if (!validObject(value)) value as DateTime; 
     tuple.Put(dataSet.Tables[0].ColumnNames[i], value); 
    } 

    inSpace_.Put(tuple); 
} 

bool validObject(object obj) { return (null != obj); } 

更新,根据您的修改,我会在类型使用交换机来代替:

for (int i = 0; i < currRow.Values.Length; i++) 
{ 
    var type = obj.GetType(); 
    var obj = dataSet.Tables[0].ColumnNames[i], currRow.Values[i]; 
    var value = null; 
    switch (type) 
    { 
     case DateTime: 
      value = DateTime.Parse(obj); 
      break; 
     case double: 
      value = Convert.ToDouble(obj); 
      break; 
     case string: 
      value = Convert.ToString(obj); 
      break; 
    } 
    tuple.Put(dataSet.Tables[0].ColumnNames[i], value); 
} 
+0

我认为我们正在正确的轨道上,但我不只是要检查和得到它是什么类型。我想根据自己的类型来分析每个对象。所以,如果你getType(),它变成日期时间,我会插入它像 inSpace_.Put(dataSet.Tables [0] .ColumnNames [i],(DateTime)currRow.Values [i]); – Ramie 2013-03-07 19:11:13

+0

您是否尝试过版本1?它会根据它能够投射的类型来投射obj。 – 2013-03-07 19:12:21

+0

是啊生病尝试一下,请你看看我发布的新代码,当我试图做到 – Ramie 2013-03-07 19:12:48

如果你知道在编译时的类型,使用Convert.ToDoubleConvert.ToInt32等。如果你不这样做,请使用Convert.ChangeType