C# 暂停,直到成功创建对象
我是一个初学者程序员,需要一些帮助。在我的程序开始时,创建了5个兔子(对象类型兔子)。看起来是这样的:C# 暂停,直到成功创建对象,c#,C#,我是一个初学者程序员,需要一些帮助。在我的程序开始时,创建了5个兔子(对象类型兔子)。看起来是这样的: List<Bunny> bunnies = new List<Bunny>(); Bunny newBunny; for(int i = 0; i < 5; i++) { newBunny = new Bunny(); bunnies.Add(newBunny); } public Bunny() { Random randNum =
List<Bunny> bunnies = new List<Bunny>();
Bunny newBunny;
for(int i = 0; i < 5; i++)
{
newBunny = new Bunny();
bunnies.Add(newBunny);
}
public Bunny()
{
Random randNum = new Random ();
int namesCount = Enum.GetNames(typeof(BunnyName)).Length;
Name=((BunnyName)(randNum. Next(0, namesCount)));
int genderCount = Enum.GetNames(typeof(BunnyGender)).Length;
Gender=((BunnyGender)(randNum. Next(0, genderCount)));
int colorCount = Enum.GetNames(typeof(BunnyColor)).Length;
Color=((BunnyColor)(randNum. Next(0, colorCount)));
Age=-1;
if(randNum. Next(1,101)<2)
Radioactive = true;
else
Radioactive =false;
}
List bunnies=new List();
兔子纽布尼;
对于(int i=0;i<5;i++)
{
newBunny=新兔子();
添加(newBunny);
}
我的问题是newBunny的构建耗时太长,程序继续使用for循环。这会导致列表仅包含第一个构造的newBunny及其副本。运行代码会打印以下内容: 姓名凯特,性别男,白色,0岁,假 姓名凯特,性别男,白色,0岁,假 姓名凯特,性别男,白色,0岁,假 姓名凯特,性别男,白色,0岁,假 姓名凯特,性别男,白色,0岁,假 结构如下所示:
List<Bunny> bunnies = new List<Bunny>();
Bunny newBunny;
for(int i = 0; i < 5; i++)
{
newBunny = new Bunny();
bunnies.Add(newBunny);
}
public Bunny()
{
Random randNum = new Random ();
int namesCount = Enum.GetNames(typeof(BunnyName)).Length;
Name=((BunnyName)(randNum. Next(0, namesCount)));
int genderCount = Enum.GetNames(typeof(BunnyGender)).Length;
Gender=((BunnyGender)(randNum. Next(0, genderCount)));
int colorCount = Enum.GetNames(typeof(BunnyColor)).Length;
Color=((BunnyColor)(randNum. Next(0, colorCount)));
Age=-1;
if(randNum. Next(1,101)<2)
Radioactive = true;
else
Radioactive =false;
}
publicbanny()
{
Random randNum=新的Random();
int namesCount=Enum.GetNames(typeof(BunnyName)).Length;
Name=((BunnyName)(randNum.Next(0,namesCount));
int genderCount=Enum.GetNames(typeof(BunnyGender)).Length;
性别=((邦尼性别)(randNum.Next(0,性别计数));
int colorCount=Enum.GetNames(typeof(BunnyColor)).Length;
Color=((BunnyColor)(randNum.Next(0,colorCount));
年龄=-1岁;
如果(randNum.Next(1101)您的程序执行是完全同步的,那么实际上列表中有5个不同的Bunny实例。
如果您不相信我,请更改Bunny的构造函数并向其添加一个整数。在构造函数中,将此整数指定给Bunny的实例变量,如下所示:
public class Bunny{
private int _instanceId;
public Bunny(int instanceId){
_instanceId = instanceId;
}
}
在循环中执行以下操作:
newBunny = new Bunny(i);
现在使用调试器逐步完成代码。希望是visual studio。在add语句上放置一个断点,并将光标导航/悬停在bunnies变量上以查看其中的内容。您甚至可以检查不同的实例,您将看到instanceid不同。
您的代码只创建了5个不同的Bunny实例,但由于构造函数是相同的,因此最终会得到5个看起来完全相同的实例
要获得真正的随机值,请在构造函数中执行以下操作:
static Random randNum = new Random ();
您的程序执行是完全同步的,因此实际上列表中有5个不同的Bunny实例。
如果您不相信我,请更改Bunny的构造函数并向其添加一个整数。在构造函数中,将此整数指定给Bunny的实例变量,如下所示:
public class Bunny{
private int _instanceId;
public Bunny(int instanceId){
_instanceId = instanceId;
}
}
在循环中执行以下操作:
newBunny = new Bunny(i);
现在使用调试器逐步完成代码。希望是visual studio。在add语句上放置一个断点,并将光标导航/悬停在bunnies变量上以查看其中的内容。您甚至可以检查不同的实例,您将看到instanceid不同。
您的代码只创建了5个不同的Bunny实例,但由于构造函数是相同的,因此最终会得到5个看起来完全相同的实例
要获得真正的随机值,请在构造函数中执行以下操作:
static Random randNum = new Random ();
您的程序执行是完全同步的,因此实际上列表中有5个不同的Bunny实例。
如果您不相信我,请更改Bunny的构造函数并向其添加一个整数。在构造函数中,将此整数指定给Bunny的实例变量,如下所示:
public class Bunny{
private int _instanceId;
public Bunny(int instanceId){
_instanceId = instanceId;
}
}
在循环中执行以下操作:
newBunny = new Bunny(i);
现在使用调试器逐步完成代码。希望是visual studio。在add语句上放置一个断点,并将光标导航/悬停在bunnies变量上以查看其中的内容。您甚至可以检查不同的实例,您将看到instanceid不同。
您的代码只创建了5个不同的Bunny实例,但由于构造函数是相同的,因此最终会得到5个看起来完全相同的实例
要获得真正的随机值,请在构造函数中执行以下操作:
static Random randNum = new Random ();
您的程序执行是完全同步的,因此实际上列表中有5个不同的Bunny实例。
如果您不相信我,请更改Bunny的构造函数并向其添加一个整数。在构造函数中,将此整数指定给Bunny的实例变量,如下所示:
public class Bunny{
private int _instanceId;
public Bunny(int instanceId){
_instanceId = instanceId;
}
}
在循环中执行以下操作:
newBunny = new Bunny(i);
现在使用调试器逐步完成代码。希望是visual studio。在add语句上放置一个断点,并将光标导航/悬停在bunnies变量上以查看其中的内容。您甚至可以检查不同的实例,您将看到instanceid不同。
您的代码只创建了5个不同的Bunny实例,但由于构造函数是相同的,因此最终会得到5个看起来完全相同的实例
要获得真正的随机值,请在构造函数中执行以下操作:
static Random randNum = new Random ();
它们可能是不同的对象,但所有的随机数都是相同的
这是因为Random
的构造函数在没有参数的情况下使用系统时钟中的种子。因此,如果像这样快速更新它们,它们最终都是相同的,并且在调用Next
时会给出相同的值
最好将一个随机数传递给所有构造函数并使用它
List<Bunny> bunnies = new List<Bunny>();
Random random = new Random();
for(int i = 0; i < 5; i++)
{
bunnies.Add(new Bunny(random));
}
它们可能是不同的对象,但所有的随机数都是相同的
这是因为Random
的构造函数在没有参数的情况下使用系统时钟中的种子。因此,如果像这样快速更新它们,它们最终都是相同的,并且在调用Next
时会给出相同的值
最好将一个随机数传递给所有构造函数并使用它
List<Bunny> bunnies = new List<Bunny>();
Random random = new Random();
for(int i = 0; i < 5; i++)
{
bunnies.Add(new Bunny(random));
}
它们可能是不同的对象,但所有的随机数都是相同的
这是因为Random
的构造函数在没有参数的情况下使用系统时钟中的种子。因此,如果像这样快速更新它们,它们最终都是相同的,并且在调用Next
时会给出相同的值
最好将一个随机数传递给所有构造函数并使用它
List<Bunny> bunnies = new List<Bunny>();
Random random = new Random();
for(int i = 0; i < 5; i++)
{
bunnies.Add(new Bunny(random));
}
它们可能不同