使用动态值定义具有名称的对象

时间:2012-12-08 19:17:54

标签: c# variables for-loop

好的,我有这段代码:

int arrPanelsRequired = 4;
string airport;
int arrPanelsMade = 0;
for (; arrPanelsMade <= arrPanelsRequired; arrPanelsMade++)
{
    Panel arrPanelXXX = new Panel();

我需要将XXX替换为arrPanelsMade的值。我找到了几种在变量值之后命名对象的方法,但是,我无法在这里应用任何一个:(

4 个答案:

答案 0 :(得分:2)

我认为这不是一个好主意,更不用说在C#中了。我可以看到许多arr前缀,这导致我使用数组。我想你可能正在寻找这样的东西:

int arrPanelsRequired = 4;
Panel[] panels = new Panel[arrPanelsRequired];
for (int arrPanelsMade = 0; arrPanelsMade < arrPanelsRequired; arrPanelsMade++)
{
    panels[arrPanelsMade] = new Panel();
}

答案 1 :(得分:1)

你要做的是不好的做法。它传递的是弱类型语言,但在强类型语言(如C#)中,需要显式声明变量。这有助于编译器捕获可能由错别字或一般开发错误引起的错误。例如,如果您有一个变量arrPanel089,您/编译器如何知道它是否已被声明?当来自弱类型语言时,强类型看起来像是一个约束,但它确实是一个很好的工具,可以为开发人员节省大量的麻烦。

如果要创建一组面板,请将它们存储在数组/列表/ etc中,然后按索引访问它们。如果您想给他们一个密钥,请将它们存储在一个字典中,该字典允许您通过密钥访问值。

答案 2 :(得分:1)

您应该将面板添加到List或数组中,然后通过索引访问它们:

arrPanel = new Panel[arrPanelsRequired];
for( int idx = 0 ; idx < arrPanelsRequired ; idx++)
    arrPanel[idx] = new Panel();

答案 3 :(得分:1)

你在这里发生了一些引发红旗的事情。我会稍微偏离你的问题,因为我认为你可能会在几个方面走错路。

  1. 删除“arr”前缀,只需调用变量即可 - 不要试图模仿Hungarian Notation,除非你有充分的理由这样做。

  2. 如果您不打算在循环标题中执行初始化,请考虑使用while循环而不是for循环。

  3. 现在回答你的问题。不,语言不能那样工作。请改用List<Panel>课程。这将允许您动态添加更多面板,而无需预定义您想要的数量,例如在数组中。