如何在C#中将代表二维数组的Object转换为二维数组变量
解决C#中Object类型二维数组的转换问题
直接调用ToString()出现数据截断,是因为多维数组的默认ToString()方法仅返回类型名称,不会遍历输出所有元素。要将e.Vtq.Value(实际类型为string[m,n])转换为完整的二维字符串数组,可按以下方式处理:
方法一:借助Array类直接操作(高效且保留二维结构)
public void client_Main1_ItemChanged(object sender, EasyDAItemChangedEventArgs e) { if (e.Succeeded) { // 将Object转换为Array类型,所有多维数组都继承自Array var twoDArray = e.Vtq.Value as Array; if (twoDArray == null) return; // 获取二维数组的行数和列数 int rows = twoDArray.GetLength(0); int cols = twoDArray.GetLength(1); // 创建对应尺寸的二维字符串数组 string[,] stringTwoDArray = new string[rows, cols]; // 遍历每个元素并转换为字符串 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { var element = twoDArray.GetValue(i, j); stringTwoDArray[i, j] = element?.ToString(); } } // 此时stringTwoDArray即为完整的二维字符串数组,可直接使用 } }
方法二:结合LINQ转换(得到交错数组)
如果偏好LINQ写法,可先将二维数组转为一维序列,再按列数分组得到交错数组:
public void client_Main1_ItemChanged(object sender, EasyDAItemChangedEventArgs e) { if (e.Succeeded) { var twoDArray = e.Vtq.Value as Array; if (twoDArray == null) return; int cols = twoDArray.GetLength(1); // 转一维序列后按列数分组,生成交错数组 string[][] stringJaggedArray = ((IEnumerable)twoDArray) .Cast<object>() .Select(x => x?.ToString()) .Select((item, index) => new { Item = item, Index = index }) .GroupBy(x => x.Index / cols) .Select(g => g.Select(x => x.Item).ToArray()) .ToArray(); // 若需矩形二维数组string[,],可从交错数组进一步转换 } }
注:方法一直接操作Array类,性能更优且能精准保留原二维数组的结构;方法二生成的是交错数组,若需要矩形二维数组需额外处理。
内容的提问来源于stack exchange,提问作者Mdarende
相关产品推荐
相关产品推荐

