这对我来说听起来很简单,但我想我错过了一些东西。
我有以下课程:
public class Difficulty
{
public int Fractional;
public int ArtistMax;
private readonly List<Difficulty> QuestionDifficultyList = new List<Difficulty>();
public Difficulty()
{
PopulateDifficultyData();
}
public void PopulateDifficultyData()
{
Difficulty item = new Difficulty
{
Fractional = 3,
ArtistMax = 30
};
QuestionDifficultyList.Add(item);
}
}
调用初始化类时:
Difficulty DifficultyData = new Difficulty();
它将无休止地执行构造函数。
对于此方案,应使用什么方法? 我需要用一些值填充类列表。
使用new
初始化实例时,您正在调用类构造函数。在构造函数中调用PopulateDifficultyData()
Difficulty()
构造函数会创建新的Difficulty
实例。新的实例创建在某种无限循环中再次调用构造函数Difficulty()
依此类推。
您需要在另一个位置创建新实例,例如main
或某个管理器类。
不需要在构造函数中创建 Difficulty 的新实例。
public class Difficulty
{
public int Fractional;
public int ArtistMax;
private readonly List<Difficulty> QuestionDifficultyList = new List<Difficulty>();
public Difficulty()
{
PopulateDifficultyData();
}
public void PopulateDifficultyData()
{
Fractional = 3,
ArtistMax = 30
}
}
此外,您正在为每个难度实例创建一个问题难度列表 - 您真的要这样做吗?也许这应该是静态的,所以你只有一个列表。
在我看来,最简单的解决方案是在PopulateDifficultyData
中使用不同的构造函数。像这样:
public Difficulty(int fractional, int artistMax)
{
Fractional = fractional;
ArtistMax = artistMax;
}
public void PopulateDifficultyData()
{
Difficulty item = new Difficulty(3, 30);
// continue to use item
}
此代码将列表放在另一个类中,并使难度类更加动态。它仍然可以自动创建新的难度实例:
public class Difficulty
{
public int Fractional;
public int ArtistMax;
public Difficulty()
{
PopulateDifficultyWithDefaultData();
}
public Difficulty(int fractional, int artistmax)
{
this.Fractional = fractional;
this.ArtistMax = artistmax;
}
public void PopulateDifficultyWithDefaultData()
{
this.Fractional = 3,
this.ArtistMax = 30
}
}
public class DifficultyList
{
public List<Difficulty> QuestionDifficultyList = new List<Difficulty>();
public void AddDifficulty()
{
QuestionDifficultyList.Add(new Difficulty());
}
public void AddDifficulty(int fractional, int artistmax)
{
QuestionDifficultyList.Add(new Difficulty(fractional, artistmax));
}
}