解析C中的对象数组#
问题描述:
我有一个对象数组,我想将它传递给只接受DOUBLE
,NULL
,STRING
或DATETIME
的方法。所以当我尝试传递值时,它会给出一个错误,说我不能传入任何任意对象,并且必须首先将其解析为DOUBLE
,NULL
,STRING
或DATETIME
。解析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);
}
总之我需要一种方法来分析每个对象,并强制转换为相应的一个,然后把它放在里面的元组。
编辑:
这里就是我试图做的,但它没有工作:
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);
}
答
如果你知道在编译时的类型,使用Convert.ToDouble
,Convert.ToInt32
等。如果你不这样做,请使用Convert.ChangeType
。
我认为我们正在正确的轨道上,但我不只是要检查和得到它是什么类型。我想根据自己的类型来分析每个对象。所以,如果你getType(),它变成日期时间,我会插入它像 inSpace_.Put(dataSet.Tables [0] .ColumnNames [i],(DateTime)currRow.Values [i]); – Ramie 2013-03-07 19:11:13
您是否尝试过版本1?它会根据它能够投射的类型来投射obj。 – 2013-03-07 19:12:21
是啊生病尝试一下,请你看看我发布的新代码,当我试图做到 – Ramie 2013-03-07 19:12:48