在C#中用'foreach'循环创build一个string数组

我稍微改变了一些来自msdn.com的代码。 我试图在Excel电子表格中获取所有工作表名称的string数组。 我可以添加一些代码到foreach语句,以便每次循环时,它将attr.Value放入数组中?

 public static void GetSpreadsheetData(string fileName) { using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName, false)) { string[] allTheSheets = new string[0]; string[] allTheData = new string[0]; S sheets = spreadsheetDocument.WorkbookPart.Workbook.Sheets; foreach (E sheet in sheets) { foreach (A attr in sheet.GetAttributes()) { int i = 0; string sheetName = attr.Value; allTheSheets[i] = attr.Value.ToString(); i++; Console.WriteLine(allTheSheets[0]); Console.ReadLine(); } } } } 

这是我收到的错误消息:

“指数数组的边界之外。”

让我困惑的事情之一是,当我实例化数组时,我给了它一个索引[0],那么这是如何超出边界?

你已经创build了一个只包含一个元素的数组,并且这个元素将被存储在索引0处。当然,如果在内部循环中有多于一个类A的实例,那么在数组中需要更多的元素。

而不是使用数组,你可以改变你的代码来使用List<string>

 using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(fileName, false)) { List<string> allTheSheets = new List<string>(); List<string> allTheData = new List<string>(); S sheets = spreadsheetDocument.WorkbookPart.Workbook.Sheets; foreach (E sheet in sheets) { foreach (A attr in sheet.GetAttributes()) { string sheetName = attr.Value; allTheSheets.Add(attr.Value.ToString()); } } 

在这两个循环结束时,您将拥有allTheSheets列表中的所有A值,您可以使用其他foreach查看其内容。

说,你的代码看起来有点奇怪。 用于存储和打印string元素的索引始终为零,因此不应该有任何Index Out Of Bound