当我编译程序时,我得到以下错误:
错误1最佳重载方法匹配'System.Windows.Forms.ListBox.ObjectCollection.Add(object)'有一些c: users joses documentsvisual studio2013Projectspractice1practice1Form1.cs 26 13 practice1
错误2参数1:无法从'method group'转换为’object’c: users joses documentsvisual studio2013Projectspractice1practice1Form1.cs 26 35 practice1
这是我正在努力的代码:
namespace practice1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
talonary talonaryobj = new talonary(txtname.Text, txtlastname.Text,double.Parse(txtSalary.Text));
lsttalonary.Items.Add(talonaryobj.name);
lsttalonary.Items.Add(talonaryobj.lastname);
lsttalonary.Items.Add(talonaryobj.calculateSalary); //ERROR LINE
}
}
}
这是我正在使用的类:
namespace practice1
{
public class talonary
{
public string name;
public string lastname;
public double salary;
public talonary(string n, string ln, double s)
{
this.name = n;
this.lastname = ln;
this.salary = s;
}
public string calculateSalary(double s)
{
s = s - (s * 0.05);
return s.ToString();
}
}
}
您需要向calculateSalary
方法传递参数。当你使用一个没有参数的方法名时,你是将方法本身传递给Add
方法,而不是调用该方法并获得结果。
lsttalonary.Items.Add(talonaryobj.calculateSalary); //ERROR LINE
应:lsttalonary.Items.Add(talonaryobj.calculateSalary(talonaryobj.salary)); //Fixed line :)
最好不要将工资传递给calculateSalary
方法。为什么不这样写呢?
public string CalculateSalary()
{
var s = this.salary - (this.salary * 0.05);
return s.ToString();
}
然后你可以这样称呼它:
lsttalonary.Items.Add(talonaryobj.CalculateSalary());
lsttalonary.Items.Add(talonaryobj.calculateSalary(double s));
行调用一个方法(calculateSalary),该方法在一个参数中传递,该参数是double s
。你没有给它一个double
来执行计算。它看起来应该返回与工资相关的内容,所以也许您想要lsttalonary.Items.Add(talonaryobj.calculateSalary(talonaryobj.salary));
正如在另一个答案中提到的,您没有将值传递给CalculateSalary
函数。我再进一步说,它应该是一个Salary
属性,类型为double
。
private double salary;
public double Salary { get { return salary; } }
那么你的代码应该处理在类之外的薪水值的格式化。
我还建议将字段包装在属性中(可能是只读的)。
private string name;
private string lastname;
public string Name { get { return name; } }
public string Lastname { get { return lastname; } }
那么你需要修改你的呼叫代码。
private void button1_Click(object sender, EventArgs e)
{
talonary talonaryobj = new talonary(txtname.Text, txtlastname.Text,double.Parse(txtSalary.Text));
lsttalonary.Items.Add(talonaryobj.Name);
lsttalonary.Items.Add(talonaryobj.Lastname);
//lsttalonary.Items.Add(talonaryobj.calculateSalary); //ERROR LINE
lsttalonary.Items.Add(string.Format("##some format string here##", talonaryobj.Salary));
}