从“System.Object [,]”c#中获取值
Posted
技术标签:
【中文标题】从“System.Object [,]”c#中获取值【英文标题】:Get Values out of "System.Object[,]" c# 【发布时间】:2021-04-18 12:28:32 【问题描述】:我从这样的 Excel 工作表中收集数据(使用 Interop Excel):
var tmp = WorkSheet.Range["G2", "AG2"].Value2;
现在我的问题是我无法获取数据,因为 tmp 的类型是 object object[,]
。如何访问数据?
【问题讨论】:
Convert.ToDouble(tmp[r, c])
怎么样,r
和 c
是您要访问的行和列索引?
这能回答你的问题吗? How can I quickly up-cast object[,] into double[,]?
@Youssef13 如果我尝试这样的事情:` var tmp2 = Convert.ToDouble(tmp[r, c]); ` 我收到一个错误 CS0021
请复制/粘贴错误信息文本。
使用 [] 的索引不能应用于“object”类型的表达式。 CS0021
【参考方案1】:
根据调试器中的映像,所有值都是双精度值,因此您可以安全地转换为双精度值。
var tmp = (object[,])WorkSheet.Range["G2", "AG2"].Value2;
// Create a copy of the array
double[,] doubles = new double[tmp.GetLength(0), tmp.GetLength(1)];
for (int x = 0; x < tmp.GetLength(0); x++)
for (int y = 0; y < tmp.GetLength(1); y++)
doubles[x, y] = (double)tmp[x, y];
// Or inline
double value = (double)tmp[x,y]
【讨论】:
Array.Copy 可能运行良好,并且比循环输入更少。var doubles = new double[tmp.GetLength(0), tmp.GetLength(1)];
Array.Copy(tmp, doubles, tmp.Length);
@Youssef13 如果我尝试使用您的代码,我收到错误 CS1061 "object" does not contain a definition for "GetLength".
@Lars 考虑先将tmp
转换为object[,]
。以上是关于从“System.Object [,]”c#中获取值的主要内容,如果未能解决你的问题,请参考以下文章
未定义或导入 C# 预定义类型“System.Object”
在 Directory<system.String, system.Object> 中按键访问值 - C# Unity Dictionary
c++可以“System::Object obj”定义一个object类吗?