是否有任何办法可以实现这一目标-绝对是出于好奇而不是必要,基本上只是为了缩短编写的代码...但是这样做可能使在循环中添加构造函数变量更容易...
代替:
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();
}
}
}
答案 0 :(得分:1)
您的第二个示例无法从两个方面考虑您的想法。
1)不会分配ITEM1和ITEM2属性。
正在发生的事情是您向null
添加2 x List
。那些null
不再与ITEM1和ITEM2保持任何联系。
2)这2个新项目不会分配给您的List
正在发生的事情是,foreach运算符将指向null
的指针传递到变量i
中,但是您的赋值然后仅使用另一个指向新项的指针覆盖了该指针。如果列表中包含null以外的任何内容,也会发生这种情况。您正在覆盖指针。 i
与List
不再有任何关系。
您似乎混淆了指针和引用。如果全部使用引用,则将按您假设的方式工作:对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";