我在c#中有一个object
,来自使用Interop在Excel中读取命名范围,它看起来像这样:
myObject =
oName.RefersToRange.Value {object[1..1, 1..5]}
((object[,])oName.RefersToRange.Value)[1, 1] 10
((object[,])oName.RefersToRange.Value)[1, 2] 20
((object[,])oName.RefersToRange.Value)[1, 3] 30
((object[,])oName.RefersToRange.Value)[1, 4] 40
((object[,])oName.RefersToRange.Value)[1, 5] 50
我想将其转换为Decimal
,如:
myDecimal = {[10.0], [20.0], [30.0], [40.0], [50.0]}
我试图通过使用以下代码来做到这一点:
decimal[,] myDecimal = (decimal[,])myObject
我也试过了:
decimal[,] myDecimal = Convert.ToDecimal(myObject)
和一大堆其他的东西,没有一个是真正有效的,都倾向于给我错误。
我想另一种方法是创建一个方法,迭代两个维度,并将它们转换为Decimal
或将值设置为0.0。那没问题,但我似乎无法做到。以下是我所拥有的(顺便说一句,我知道这很草率,只是为了证明我在解决这个问题时无能为力):
public static decimal[,] Convert2dObjectTo2dDecimalArray(object obj)
{
decimal[,] result = default(decimal[,]);
for (int i = 0; i <= obj.SomeUnknownMethodThatCountsElements(0); i++)
{
for (int j = 0; i <= obj.SomeUnknownMethodThatCountsElements(1); j++)
{
try
{
result[i, j] = Convert.ToDecimal(obj[i, j]);
}
catch (Exception)
{
result[i, j] = new decimal(0.0);
}
}
}
return result;
}
感谢您的帮助。
BTW -我知道我上面的例子实际上是一个一维的数据集,但我需要与二维的工作,我只是试图保持示例用例简短。
你应该能够做到这一点
object[,] obj = new object[,] { { 1.1, 2.1, 2.3 },{ 3.2, 4.3, 5.4 } };
decimal[,] result = new decimal[obj.GetLength(0), obj.GetLength(1)];
for (int i = 0; i < obj.GetLength(0); i++)
{
for (int j = 0; j < obj.GetLength(1); j++)
{
try
{
result[i, j] = Convert.ToDecimal(obj[i, j]);
}
catch (Exception)
{
result[i, j] = new decimal(0.0);
}
}
}