繁体   English   中英

C#重载无效参数

[英]C# Overloading Invalid Arguments

我对C#还是很陌生,所以如果我的编码有点晦涩,对不起! 我的People应用程序不断出现3个错误。
这些错误是由于尝试将int和bool转换为字符串引起的,我只是不确定我将如何更改它,如果你们能帮帮我,那将非常感谢! 任何提示也将不胜感激! 不断发生的错误是:

  • 错误1:“ Lab5b.Person.Person(string,int,string,string,bool,string)”的最佳重载方法匹配具有一些无效的参数

  • 错误2:参数2:无法从“字符串”转换为“ int”

  • 错误3:参数5:无法从“方法组”转换为“布尔”

我的代码:

public partial class _Default : Page
    {

        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write("You have successfully added a Person!");

            Person p = new Person(TextBox1.Text, TextBox2.ToString(), TextBox3.Text, TextBox4.Text, DropDownList1.ToString, TextBox5.Text);
        }
    }

和我的Person类:

class Person
{
    private string name;
    private int age;
    private string dob;
    private string telNo;
    private bool gender;
    private string address;

    public Person(string name, int age, string dob, string telNo, bool gender, string address)
    {
        Name = name;
        Age = age;
        DOB = dob;
        TelNo = telNo;
        Gender = gender;
        Address = address;
    }

    public int Age { get; set; }
    public string Name { get; set; }
    public string DOB {get; set;}
    public string TelNo {get; set;}
    public bool Gender {get; set;}
    public string Address {get; set;}

    public string PresentPerson()
    {

    }
}

您有很多问题。

  • 首先,当“年龄”(Age)参数需要一个int值时,将TextBox2中的值作为字符串传递。
  • 其次,因为没有关闭params () ,所以将DropDownList1值作为方法组传递
  • 第三,如果HAD正确调用了.ToString() ,则可能会将字符串值传递给期望布尔值的参数。
  • 第四,引用控件本身TextBox2而不是文本框的值将给您带来意外的错误结果。
  • 第五,您实际上不是在检索下拉列表的选定值,而是在尝试传递控件本身。

protected void Button1_Click(object sender, EventArgs e)
{
    Response.Write("You have successfully added a Person!");

    Person p = new Person(TextBox1.Text, int.Parse(TextBox2.Text.ToString()), 
        TextBox3.Text, TextBox4.Text, bool.Parse(DropDownList1.SelectedValue.ToString()), 
        TextBox5.Text);
}

对于Gender,代码假设您的下拉列表值为True或False,以便可以正确分析它们,而没有空条目或其他值(例如Male / Female)的条目。

另外,值得注意的是,如果这些解析不能完全正确地进行,则将引发异常。 最好使用TryParse并验证您的数据是否符合您的想法。

protected void Button1_Click(object sender, EventArgs e)
{
    Response.Write("You have successfully added a Person!");

    int age;
    bool gender;

    int.TryParse(TextBox2.Text.ToString(), out age);
    bool.TryParse(DropDownList1.SelectedValue, out gender);

    Person p = new Person(TextBox1.Text, age, TextBox3.Text, TextBox4.Text, gender, 
                    TextBox5.Text);
}

您在此行中调用构造函数人:

Person p = new Person(TextBox1.Text, TextBox2.ToString(), TextBox3.Text, TextBox4.Text, DropDownList1.ToString, TextBox5.Text);

请注意,TextBox.Text是字符串类型。

您的人构造函数具有以下特征:

public Person(string name, int age, string dob, string telNo, bool gender, string address)

这意味着第二个和第五个参数分别是int和bool。 如果用户在文本框中正确输入了数据,并且下拉列表具有正确的值,则可以使用Convert类获取正确的格式,如下所示:

Person p = new Person(TextBox1.Text, Convert.ToInt32(TextBox2.Text), TextBox3.Text, TextBox4.Text, Convert.ToBoolean(DropDownList1.SelectedValue), TextBox5.Text);

调用TextBox2.ToString()试图将对象转换为字符串,而不一定是文本框中的文本。 对于下拉列表类似,根据设置方式,应在其中使用SelectedText或SelectedValue。

同样,在“人”的类定义中,您也定义了两次字段。

private string name;
private int age;
private string dob;
private string telNo;
private bool gender;
private string address;

public int Age { get; set; }
public string Name { get; set; }
public string DOB {get; set;}
public string TelNo {get; set;}
public bool Gender {get; set;}
public string Address {get; set;}

确保只定义一次字段。 如果您尝试拥有私有字段和公共属性,通常的做法是将camelCase作为私有字段名称,将PascalCase作为属性。 还应该定义属性以访问私有字段:

private string name;

public string Name { get { return name; } set { name = value; } }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM