【问题标题】:Define an object with a name constructed using a dynamic value定义一个使用动态值构造的名称的对象
【发布时间】:2012-11-26 16:29:00
【问题描述】:

好的,我有这段代码:

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

我需要将XXX 替换为arrPanelsMade 的值。我找到了几种以变量值命名对象的方法,但是,我无法在此处应用它们中的任何一种:(

【问题讨论】:

  • 为什么需要这样做?听起来您实际上是在寻找列表或数组。

标签: c# variables for-loop


【解决方案1】:

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

  1. 去掉“arr”前缀,直接调用你的变量——除非你有充分的理由,否则不要试图模仿Hungarian Notation

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

  3. 现在回答您的问题。不,语言不是那样工作的。请改用 List&lt;Panel&gt; 类。这将允许您动态添加更多面板,而无需预先定义所需的数量,例如在数组中。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        您正在尝试做的是不好的做法。它在弱类型语言中传递,但在 C# 等强类型语言中,变量需要显式声明。这有助于编译器捕获可能由拼写错误或一般开发错误引起的错误。例如,如果您有一个变量arrPanel089,您/编译器如何知道它是否已被声明?当来自弱类型语言时,强类型似乎是一种约束,但它确实是一个很棒的工具,可以为开发人员省去很多麻烦。

        如果您想创建一组面板,请将它们存储在数组/列表/等中并通过它们的索引访问它们。如果您想给它们一个键,请将它们存储在字典中,这样您就可以通过键访问值。

        【讨论】:

        • 这不仅是他们不应该,而是他们需要成为。
        猜你喜欢
        • 1970-01-01
        • 2019-05-17
        • 2013-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多