如何解决如何在一个步骤中将装箱的二维数组转换为二维字符串数组?
| 有没有一种方法可以使用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;
}
,您可以为二维数组写your4ѭ:
public static TOutput[,TOutput>(
this TInput[,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]);
return result;
}
,string[][] strings = ((object[][])range.Value)
.Select(x => x.Select(y => y.ToString()).ToArray()).ToArray();
编辑:关于object [,]而不是object [] []的澄清显然使此方法过时了。一个有趣的问题;多维数组非常有限。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。