【问题标题】:Create dynamically attributes name inside a for-loop statement在 for 循环语句中动态创建属性名称
【发布时间】:2012-05-16 08:37:41
【问题描述】:

我想在 for 语句中创建名为“Item”的类的新实例,但我不知道如何动态命名。

for (i=0; i < Counter; i++)
{
    MyClass "XXXX" = Class.method();
}

如何创建 2 个字符串并命名? -例如-

for(i=0;i<2;i++){
  string name + i = "Hello" 
}

已编辑

我有一些建议来实现我的解决方案,我可以创建一个字典。

       var bomItems = new Dictionary<Item, Item>();

       for (int i = 0; i < Count; i++)
       {
           Item bomItem = inn.newItem("Part BOM","add");
           bomItems.Add(bomItem + i, bomItem);
       }

但是我在“bomItem + i”中遇到了一个合理的错误。我不能应用操作数 '+' 。很明显。

有人对此有答案吗?

谢谢。

【问题讨论】:

  • 你在看字典吗?
  • 请在此处说明用例。我敢打赌这不是你真正想要的。
  • Counter 变量不能是字符串。它是int,必须在 for 循环之外创建。但是,如果您想将内容动态分配给字符串字段,则您的 "xxxx" 不应在其周围加上引号。
  • 我想在 for 循环中创建自己的数据变量类型。但我不知道如何为这些数据命名变量。我以字符串为例。数组和列表不给出变量的名称。
  • 您将无法以您描述的方式创建动态变量名称。最佳解决方案是下面为列表和字典提供的解决方案。这是您将得到的最接近的值。此外,如果您在 for 循环中声明了一个变量,您将无法在 for 循环之外访问它,那么为什么它需要一个动态名称?只要把它称为与它可能是什么有关的通用的东西

标签: c# .net string for-loop


【解决方案1】:

你可以使用List&lt;String&gt;这样的集合:

var list = new List<String>();
for (i=0; i<Counter; i++){
     list.Add("Hello " + i);
}

编辑 根据您的评论,您希望通过变量的指定名称来访问该变量。然后你应该使用Dictionary 代替(如果名称是唯一的)。

例如:

var names = new Dictionary<String, String>();
for (i=0; i < Counter; i++){
     names.Add("Name" + i, "Hello");
}

现在您可以通过这种方式获取给定字符串键的字符串值:

String name10 = names["Name10"]; // "Hello" since all values are "Hello" in your sample

【讨论】:

  • 我想这样做:" string name + i = "Hello" "
  • @kmxillo:如果我理解正确,您可以使用Dictionary,查看我编辑的答案。
  • 是的,你明白了。但它不能将类型从字典转换为 myClass。 myClass name= new Dictionary();谢谢
  • @kmxillo:您想将自定义类myClass 存储为字典中的键还是值?无论如何,如果您想将该类型存储为值,则需要将 Dictionary&lt;string, string&gt; 更改为 Dictionary&lt;string, myClass&gt;,并且您需要向我展示如何创建 myClass 的实例。
  • @kmxillo:我已经展示了两种方式(使用列表和字典)。因此,要么通过索引 (Item item1 = items[0] //where items is a List&lt;Item&gt;) 访问列表,要么使用字典 (Item item1 = items["bomItem1"] // where items is a Dictionary&lt;String,Item&gt;)。所以你的代码中的关键问题是你使用Item 作为键,只有在你的类中覆盖GetHashCodeEquals 时才有可能。你只需要使用一个字符串作为你可以构造的键,例如:bomItems.Add("bomItem" + i, bomItem);
【解决方案2】:

您可以使用Dictionary (TKey,TValue) 类,其中键是您要计算的字符串。

Dictionary<string, string> myDictionary = new Dictionary<string, string>();
for (i=0; i < Counter; i++)
{
   myDictionary.Add("XXXX", "Hello");  // Matches your above example
}

所以 XXXX 将是您的计数器字符串,而 Hello 将是您希望与之关联的字符串。然后您可以使用

检索每个字符串
string myString = myDictionary[XXXX];

【讨论】:

    【解决方案3】:

    另一种方式是使用StringBuilder,比如

    var builder = new StringBuilder();
    for (i=0; i<Counter; i++){
         builder.Append("Hello " + i);
    }
    

    如果你需要完整的字符串之后

    builder.ToString()

    比简单的字符串操作要快得多。

    【讨论】:

      【解决方案4】:

      使用数组!

      string[] myArray = new string[Counter];
      for (int i = 0; i < Counter; i++){
        myArray[i] = "Hello";
      }
      

      【讨论】:

      • 即使对于引用类型的对象,数组是否也比 List 快得多?
      • @JohanLundberg 对于微不足道的情况只是微不足道且可忽略不计;见stackoverflow.com/questions/454916/…
      • @BalaR 我想将变量的名称赋予“Hello”值。不要通过数组或列表来引用它。我想给一个名字,例如:string name = "Hello" 稍后我将能够通过 "name" 调用这个值
      猜你喜欢
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      • 2022-12-12
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多