2

我目前正在尝试制作 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()方法是向第一个类添加新信息。

我很感激帮助

4

5 回答 5

4

您没有将任何内容传递给构造函数。您可以执行以下操作:

List<HSItem> hs = new List<HSItem>();
hs.Add(new HSItem("Darren", 1000));

或者定义一个接受 0 个参数的构造函数:

public HSItem()
{

} 
于 2013-03-19T15:35:53.080 回答
2

您需要替换此行

hs.Add(new HSItem { Name = name, Points = points });

通过以下一个

hs.Add(new HSItem (name,points));
于 2013-03-19T15:36:23.553 回答
2

你有一个构造函数,但你没有使用它。如果一个类有一个构造函数,那么它会删除默认的无参数构造函数,这意味着你不能使用new HSItem(),因为没有一个构造函数不再接受 0 参数。

改变

hs.Add(new HSItem { Name = name, Points = points });

hs.Add(new HSItem(name,points));
于 2013-03-19T15:37:00.967 回答
1

您将构造函数调用语法与属性初始值设定项语法混淆了。

正如一些人指出的那样,调用构造函数的方法是:

new HSItem(name, points);

你写的代码:

new HSItem { Name = name, Points = points };

真的只是一个方便的简写:

var item = new HSItem();
item.Name = name;
item.Points = points;
于 2013-04-17T10:39:16.400 回答
0

如果您创建一个没有构造函数的类,该类将自动获得一个没有参数的构造函数。但是,如果您定义一个带参数的构造函数,则不会自动添加没有参数的构造函数。如果你想要一个没有参数的构造函数,你应该自己添加它。或者,我建议您删除无论如何都不使用的构造函数:

删除这段代码,一切都会好起来的:

//Constructor Method
public HSItem(string name, int points)
{
    this.name = name;
    this.points = points;
}
于 2013-03-19T15:36:38.893 回答