在 List 中使用构造函数填充类的变量

  • 本文关键字:填充 变量 构造函数 List c#
  • 更新时间 :
  • 英文 :


这对我来说听起来很简单,但我想我错过了一些东西。

我有以下课程:

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));
}
}

最新更新