如何一步将盒装二维数组转换为二维字符串数组
本文关键字:二维 数组 字符串 何一步 盒装 二维数组 转换 | 更新日期: 2023-09-27 17:57:21
有没有办法使用 C#/.NET Framework 4.0 一步将盒装二维数组转换为二维字符串数组?
using ( MSExcel.Application app = MSExcel.Application.CreateApplication() ) {
MSExcel.Workbook book1 = app.Workbooks.Open( this.txtOpen_FilePath.Text );
MSExcel.Worksheet sheet1 = (MSExcel.Worksheet)book1.Worksheets[1];
MSExcel.Range range = sheet1.GetRange( "A1", "F13" );
object value = range.Value; //the value is boxed two-dimensional array
}
我希望某种形式的Array.ConvertAll可以工作,但到目前为止,答案还没有到我。
不,我认为您不能一步到位进行转换,但我可能是错的。 但是您当然可以创建一个新数组并从旧数组复制到新数组:
object value = range.Value; //the value is boxed two-dimensional array
var excelArray = value as object[,];
var height = excelArray.GetLength(0);
var width = excelArray.GetLength(1);
var array = new string[width, height];
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
array[i, j] = excelArray[i, j] as string;
}
编辑:
下面是一个二维的重载Array.ConvertAll
它并不比上面的代码复杂多少:
public static TOutput[,] ConvertAll<TInput, TOutput>(TInput[,] array, Converter<TInput, TOutput> converter)
{
if (array == null)
{
throw new ArgumentNullException("array");
}
if (converter == null)
{
throw new ArgumentNullException("converter");
}
int height = array.GetLength(0);
int width = array.GetLength(1);
TOutput[,] localArray = new TOutput[width, height];
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
localArray[i, j] = converter(array[i, j]);
}
return localArray;
}
您可以
为二维数组编写自己的ConvertAll
:
public static TOutput[,] ConvertAll<TInput, TOutput>(
this TInput[,] array, Func<TInput, TOutput> converter)
{
int length0 = array.GetLength(0);
int length1 = array.GetLength(1);
var result = new TOutput[length0, length1];
for (int i = 0; i < length0; i++)
for (int j = 0; j < length1; j++)
result[i, j] = converter(array[i, j]);
return result;
}
string[][] strings = ((object[][])range.Value)
.Select(x => x.Select(y => y.ToString()).ToArray()).ToArray();
编辑:关于对象[,]而不是对象[][]的澄清显然使这种方法过时了。 一个有趣的问题;多维数组非常有限。