在for循环中创建变量's'

3
很难解释,但我会在我的代码中展示一个例子,目前我是这样做的:
var something1 = new (Microsoft.Office.Interop.Excel.Worksheet)appExcel.Worksheets.Add(Type.Missing, appExcel.Worksheets[appExcel.Worksheets.Count], 1, XlSheetType.xlWorksheet);
var something2 = new (Microsoft.Office.Interop.Excel.Worksheet)appExcel.Worksheets.Add(Type.Missing, appExcel.Worksheets[appExcel.Worksheets.Count], 1, XlSheetType.xlWorksheet);
var something3 = new (Microsoft.Office.Interop.Excel.Worksheet)appExcel.Worksheets.Add(Type.Missing, appExcel.Worksheets[appExcel.Worksheets.Count], 1, XlSheetType.xlWorksheet);

something1.Name = "sheet1";
something2.Name = "sheet2";
something3.Name = "sheet3";

我想在for循环中创建这些变量,我认为应该是这样的:

for (int i=1;i<4;i++)
{
   var ("something" +i) = new Microsoft.Office.Interop.Excel.Worksheet)appExcel.Worksheets.Add(Type.Missing, appExcel.Worksheets[appExcel.Worksheets.Count], 1, XlSheetType.xlWorksheet); // this (of course) doenst work
}

有没有关于如何实现这个的想法?

我尝试了以下方法,但并没有成功:

var something = new (Microsoft.Office.Interop.Excel.Worksheet)appExcel.Worksheets.Add(Type.Missing, appExcel.Worksheets[appExcel.Worksheets.Count], 1 , XlSheetType.xlWorksheet)[4];


3
为什么不创建一个你的xxx.ApplicationClass()对象的数组? - Mivaweb
这让我想起了C++中的token-pasting https://msdn.microsoft.com/en-us/library/09dwwt6y.aspx :) - TaoPR
4个回答

7
你可以使用字典。
var somethigs = new Dictionary<int, xxx.ApplicationClass>();
for (var i = 1; i < 4; i++)
{
    somethigs[i] = new xxx.ApplicationClass();
}

//access them like this

somethigs[1].Name = "sheet1";
somethigs[2].Name = "sheet2";

或者使用这样的数组
var somethigs = new xxx.ApplicationClass[4];
for (var i = 0; i < 4; i++)
{
    somethigs[i] = new xxx.ApplicationClass();
}

somethigs[0].Name = "sheet1";
somethigs[1].Name = "sheet2";

请记住,数组的索引是从零开始的。


我不建议使用字典。冒昧地说,我认为OP对数组不是很熟悉。他应该先学习数组,然后再转向字典。无论如何,我觉得对于这个问题来说,数组更合适。 - MariusUt
首先,非常感谢您的帮助。我稍微编辑了一下我的问题,以更清楚地表达我想要的内容。您能否将您的代码更改为符合我的问题?提前致谢。如果您不想编辑它,也没关系 :) - wouter
嘿,我尝试了这个代码:var something = new (Microsoft.Office.Interop.Excel.Worksheet)appExcel.Worksheets.Add(Type.Missing, appExcel.Worksheets[appExcel.Worksheets.Count], 1 , XlSheetType.xlWorksheet)[4]; 但是它带来了一些错误,你有什么想法为什么会出错吗? - wouter

3
如果你确切知道需要多少实例,可以创建一个类实例的数组或列表来达到你想要的效果。
如果你想要更高级的功能,也可以创建一个字典,为每个类实例提供名称,这可以提供一种按名称访问机制。

1
Dictionary<string, ApplicationClass> dictionary = new Dictionary<string, ApplicationClass>();
for(int i = 0; i < 4; i++) {
    dictionary.Add("something" + i, new xxx.ApplicationClass());
}

var myApplicationClass = dictionary["something1"];

1
你应该使用一个数组。在你的特定情况下,
var something = new xxx.ApplicationClass[4];
for (int i = 0; i < 3; i++)
{
    something[i] = new (Microsoft.Office.Interop.Excel.Worksheet)appExcel.Worksheets.Add(Type.Missing, appExcel.Worksheets[appExcel.Worksheets.Count], 1, XlSheetType.xlWorksheet);
    something[i].Name = "sheet" + (i + 1).ToString();
}

您可能需要查找更多关于数组及其工作原理的信息。例如,请参见https://msdn.microsoft.com/en-us/library/aa288453%28v=vs.71%29.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接