如何解决"cannot convert from 'method group' to 'object'"编译错误?



当我编译程序时,我得到以下错误:

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

相关内容

最新更新