我目前正在尝试制作HighScore课程,但不确定它是如何正确的。这是到目前为止的代码:
class HSItem
{
private string name;
private int points;
//Constructor Method
public HSItem(string name, int points)
{
this.name = name;
this.points = points;
}
//Property for name
public string Name
{
get { return name; }
set { name = value; }
}
//Property for points
public int Points
{
get { return points; }
set { points = value; }
}
}
第二课:
public class HighScore
{
//Method HighScore constructor for list cap
public HighScore(int maxInList)
{
List<int> topHS = new List<int>(maxInList);
}
//Method for Add
public void Add(string name, int points)
{
List<HSItem> hs = new List<HSItem>();
hs.Add(new HSItem { Name = name, Points = points });
}
}
但是我得到了这个错误'HighScore.HSItem' does not contain a constructor that takes 0 arguments
,这让我一无所知。
Highscore
构造函数将接受一个数字以确定列表可以具有的最大空间,Add()
方法是将新信息添加到第一个类。
我很感激帮助
答案 0 :(得分:4)
您没有向构造函数传递任何内容。您可以执行以下操作:
List<HSItem> hs = new List<HSItem>();
hs.Add(new HSItem("Darren", 1000));
或者定义一个带0个参数的构造函数:
public HSItem()
{
}
答案 1 :(得分:2)
您需要替换此行
hs.Add(new HSItem { Name = name, Points = points });
以下一个
hs.Add(new HSItem (name,points));
答案 2 :(得分:2)
你有一个构造函数,但你没有使用它。如果一个类有一个构造函数,那么它将删除默认的无参数构造函数,这意味着你不能使用new HSItem()
,因为没有一个构造函数再接受0个参数。
更改
hs.Add(new HSItem { Name = name, Points = points });
要
hs.Add(new HSItem(name,points));
答案 3 :(得分:1)
您将构造函数调用语法与属性初始值设定项语法混淆。
有几个人指出,调用构造函数的方法是:
new HSItem(name, points);
你写的代码:
new HSItem { Name = name, Points = points };
实际上只是一个方便的简写:
var item = new HSItem();
item.Name = name;
item.Points = points;
答案 4 :(得分:0)
如果你创建一个没有构造函数的类,那么类将自动获得一个没有参数的构造函数。但是,如果使用参数定义构造函数,则不会自动添加没有参数的构造函数。如果你想要一个没有参数的构造函数,你应该自己添加它。或者我建议你删除你没有使用的构造函数:
删除这段代码,一切都会很好:
//Constructor Method
public HSItem(string name, int points)
{
this.name = name;
this.points = points;
}