Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 暂停,直到成功创建对象_C# - Fatal编程技术网

C# 暂停,直到成功创建对象

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 =

我是一个初学者程序员,需要一些帮助。在我的程序开始时,创建了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 = 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));
}
它们可能不同