这是一个非常类似的问题c# creating new instances of a object in a for loop,但遗憾的是我的问题略有不同。我也没有随机使用。
我有类似的设置:
public List<Candle> GetCandles(int can)
{
List<Candle> dpl = new List<Candle>();
for (int i = 0; i < can; i++)
{
Candle dp = new Candle();
dp.x = new Random().Next(0000, 9999);
dp.y = new Random().Next(0000, 9999);
dpl.Add(dp);
}
return dpl;
}
我的问题是,最后,我内心没有单独的蜡烛实例。尽管我使用的是&#34; new&#34;每一次。
我如何100%确定我将新蜡烛列入名单?
编辑:感谢所有回答,但我能够找到自己的问题。在我使用的课程中,变量是静态。这意味着每个类实例都具有相同的值。因此,如果我将A设置为等于50,则所有类都有50个。对不起,如果它不清楚,但那段代码不是我的。我没有使用随机,我刚发布了这个例子,因为它与我在代码中的设置类似。我有一个循环和一个列表,并正在向它添加实例。
答案 0 :(得分:3)
我的问题是,最后,我没有单独的实例 里面的蜡烛。它们对每个元素都是相同的蜡烛 -
嗯,它们不是同一个实例,它们都有相同的值,原因是new Random().Next
,您可以通过在for循环外声明Random
实例然后使用它来生成值。
Random random = new Random();
for (int i = 0; i < can; i++)
{
Candle dp = new Candle();
dp.x = random.Next(0000, 9999);
dp.y = random.Next(0000, 9999);
dpl.Add(dp);
}
答案 1 :(得分:1)
尽管我每次都使用“新”,但它们对于每个元素都是相同的蜡烛。
不,他们不是。您做在每个元素上都有不同的对象实例,每个对象实例都具有相同的x
和y
值,因为you're creating random numbers in a loop, all of which will have the same seed。
通过在循环之后只改变其中一个值,并且只看到那个值不同,您可以轻易地看到您没有相同的对象实例。