通过循环浏览尺寸标注对象实例化

时间:2018-07-14 17:14:01

标签: c#

是否有任何办法可以实现这一目标-绝对是出于好奇而不是必要,基本上只是为了缩短编写的代码...但是这样做可能使在循环中添加构造函数变量更容易...

代替:

public class item_holder
{
    public item ITEM1 = new item();
    public item ITEM2 = new item();
    public List<item> myItems = new List<item>();

    public item_holder()
    {
        myItems.Add(ITEM1);
        myItems.Add(ITEM2);
    }
}

我们可以有这样的东西吗?

public class item_holder
{
    public item ITEM1;
    public item ITEM2;
    public List<item> myItems = new List<item>();

    public item_holder()
    {
        myItems.Add(ITEM1);
        myItems.Add(ITEM2);

        foreach(item i in myItems)
        {
            i = new item();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您的第二个示例无法从两个方面考虑您的想法。

1)不会分配ITEM1和ITEM2属性。

正在发生的事情是您向null添加2 x List。那些null不再与ITEM1和ITEM2保持任何联系。

2)这2个新项目不会分配给您的List

正在发生的事情是,foreach运算符将指向null的指针传递到变量i中,但是您的赋值然后仅使用另一个指向新项的指针覆盖了该指针。如果列表中包含null以外的任何内容,也会发生这种情况。您正在覆盖指针。 iList不再有任何关系。

您似乎混淆了指针和引用。如果全部使用引用,则将按您假设的方式工作:对ITEM1和ITEM2的引用将被添加到列表中,并且将被分配一个新项。不幸的是(对您来说:p),这不是它的工作原理。

答案 1 :(得分:1)

您可以使用for语句,而不要使用foreach语句,该语句要求项目已在列表中

const int MaxCount = 20;

public List<item> myItems = new List<item>();

public item_holder()
{
    // Add 20 items to the list.
    for (int i = 0; i < MaxCount; i++) {
        myItems.Add(new item());
    }
}

使用数字变量的标准方法

string s1;
string s2;
string s3;
// ...
string sN;

如果要改为使用数组并为项目建立索引;

string[] s = new string[N];
s[0] = "hello";
s[1] = "world";