Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#方法重载-具有类似参数的2种方法_C#_Methods_Overloading - Fatal编程技术网

C#方法重载-具有类似参数的2种方法

C#方法重载-具有类似参数的2种方法,c#,methods,overloading,C#,Methods,Overloading,我有两个具有相似输入参数类型的方法,但参数本身不同,用于在方法中构建SQL语句 C#不喜欢这样——“类型数据库已经用相同的参数类型定义了一个名为“DatabaseSearch”的成员。” 作为一个新手,这听起来像是我构造了错误的类或方法 我是否应该在方法外部构建SQL语句,并将其及其参数传入 // Surname ONLY public void DatabaseSearch(DataGrid DataGrid, string surname) { strin

我有两个具有相似输入参数类型的方法,但参数本身不同,用于在方法中构建SQL语句

C#不喜欢这样——“类型数据库已经用相同的参数类型定义了一个名为“DatabaseSearch”的成员。”

作为一个新手,这听起来像是我构造了错误的类或方法

我是否应该在方法外部构建SQL语句,并将其及其参数传入

 // Surname ONLY
    public void DatabaseSearch(DataGrid DataGrid, string surname)
    {

        string database_file_path = @"Data Source=.\MemberDB.db";

        string sqlCmd = "Select * FROM Members WHERE Surname = @surname";

        using (var con = new SQLiteConnection(database_file_path))
        {
            using (var cmd = new SQLiteCommand(con))
            {
                con.Open();

                cmd.Parameters.AddWithValue("@surname", surname);

                cmd.CommandText = sqlCmd;

                var dataAdapter = new SQLiteDataAdapter(cmd);
                var dt = new DataTable("Members");
                dataAdapter.Fill(dt);
                DataGrid.ItemsSource = dt.DefaultView;
                dataAdapter.Update(dt);
            }
        }

    }


 // Firstname ONLY
    public void DatabaseSearch(DataGrid DataGrid, string firstname)
    {

        string database_file_path = @"Data Source=.\MemberDB.db";

        string sqlCmd = "Select * FROM Members WHERE FirstName = @firstname";

        using (var con = new SQLiteConnection(database_file_path))
        {
            using (var cmd = new SQLiteCommand(con))
            {
                con.Open();

                cmd.Parameters.AddWithValue("@firstname", firstname);

                cmd.CommandText = sqlCmd;

                var dataAdapter = new SQLiteDataAdapter(cmd);
                var dt = new DataTable("Members");
                dataAdapter.Fill(dt);
                DataGrid.ItemsSource = dt.DefaultView;
                dataAdapter.Update(dt);
            }
        }

    }
总结:

如何使两个重载方法具有相同类型的参数

 public void myMethod( int one, string one){
 ....some stuff done...
}

 public void myMethod( int two, string two){
 ....different stuff done...
}

您可以更改方法名称或更改参数的顺序。第一种方法更好

publicvoiddatabasesearchbyfirstname(int-one,stringone){
//…做了一些事。。。
}
public void数据库searchbysurname(int-two,string-two){
//…做了不同的事情。。。
}

重载仅对参数类型有效-当涉及重载时,名称没有任何意义。请将方法名称更改为更具体的名称。i、 e.
public void SearchFirstName
public void SearchLastName
这样将用户界面传递到数据库调用中也是个坏主意。将两者分开,并使用
DataTable
传递数据。将方法名称更改为“SearchByFirstName”和“SearchByStratName”。原因是在同一类中不能有两个或更多类似的方法签名。我还建议您遵循oop概念,将操作代码与UINo分离,参数不相似,但相同。int是int,字符串是astring。要寻找的术语是“signature”。谢谢,显然它不能按照我想要的方式来完成,最好的解决方案是使用两个不同名称的方法。更改参数的顺序是一个好主意,但会让人困惑。