Один метод, принимающий 3 аргумента или 4 аргумента - PullRequest
0 голосов
/ 05 марта 2010
    public static void fillCheckList(string ListType,int RecordNum,CheckBox chkRequired,TextBox txtComplete,TextBox txtMemo)
    {
        string sql_Check = String.Format(@"SELECT l.Required,l.Completed,l.ISP,l.Memo_Notes,
                                            t.List_Desc
                                            FROM List_Data l, List_Type t
                                            WHERE l.List_ID = t.List_ID
                                            AND l.Record_Num = {0}
                                            AND t.List_Desc = '{1}'", RecordNum,ListType);
        ListData LIST = new ListData();
        SqlConnection sqlConn = null;
        SqlCommand cmd_Check;
        SqlDataReader dr_Check;
        try
        {
            sqlConn = new SqlConnection(databaseConnectionString);
            sqlConn.Open();
            cmd_Check = new SqlCommand(sql_Check, sqlConn);
            dr_Check = cmd_Check.ExecuteReader();

            while (dr_Check.Read())
            {
                LIST = new ListData(Convert.ToBoolean(dr_Check["Required"]), dr_Check["Completed"].IsNull() ? (DateTime?)null : Convert.ToDateTime(dr_Check["Completed"]), dr_Check["Memo_Notes"].ToString());
            }
            chkRequired.Checked = LIST.REQUIRED;
            txtComplete.Text = LIST.COMPLETED.HasValue ? LIST.COMPLETED.Value.ToShortDateString() : "";
            txtMemo.Text = LIST.MEMO_NOTES;
        }
        catch (Exception e)
        {
            MessageBox.Show("Error found in fillCheckList..." + Environment.NewLine + e.ToString());
        }
        finally
        {
            if (sqlConn != null)
            {
                sqlConn.Close();
            }
        }
    }

Как видите, я принимаю целочисленную переменную для идентификатора проекта, строковую переменную для типа списка и тип 2 текстового поля. Таким образом, я использую этот метод, чтобы принять 4 аргумента. Я хочу, чтобы он также принимал 5 аргументов. то есть .. включить еще одно текстовое поле .. так что он принимает 4 аргумента или 5 аргументов соответственно / как мне сделать это таким же способом.

Ответы [ 6 ]

10 голосов
/ 05 марта 2010

Не используйте для этого параметры.

Используйте params для представления идеи "Я могу взять ноль, один или произвольно много дополнительных параметров. Звучит так, как будто вы хотите принять ноль или один дополнительный параметр.

TJMonk15 прав; Вы должны либо использовать необязательный параметр (в C # 4), либо написать два метода, и один из них вызовет другой со значением по умолчанию для дополнительного параметра. Предпочтительно последний.

(И ради бога, исправьте эту SQL-инъекцию!)

3 голосов
/ 05 марта 2010

Если вы используете c # 4.0, вы можете использовать Необязательные аргументы . Если нет, вы должны использовать перегрузку метода и одну перегрузку для вызова другой со значением по умолчанию для последнего параметра.

2 голосов
/ 05 марта 2010

params ваш друг.

например:

public static void fillCheckList(string ListType,int RecordNum,CheckBox chkRequired, params TextBox[] txtBoxes)
{
   TextBox txtComplete = null;
   TextBox txtMemo = null;
   TextBox txtThirdOne = null;

   if(txtBoxes.Length < 1)
   {
      throw new Exception("At least the txtComplete-Textbox has to be given");
   }
   else
   {
      txtComplete = txtBoxes[0];

      if(txtBoxes.Length >= 2)
          txtMemo = txtBoxes[1];

      if(txtBoxes.Length >= 3)
          txtThirdOne = txtBoxes[2];
   }

   // do stuff    
}
1 голос
/ 05 марта 2010

Вы можете использовать params, но для этого требуется, чтобы у вас было случайное количество аргументов одного типа или имеется набор свободно набранных аргументов (объект)

Вы также можете написать свою функцию с 5 аргументами и предоставить перегруженный метод с 4 аргументами, который вызывает первый и по умолчанию последний параметр.

public static void fillCheckList(string ListType, int RecordNum, CheckBox chkRequired, TextBox txtComplete)
        {
            fillCheckList(ListType, RecordNum, chkRequired, txtComplete, null);
        }
1 голос
/ 05 марта 2010

Проверьте ключевое слово params

0 голосов
/ 05 марта 2010

У вас есть 3 варианта

1

public static void fillCheckList(string ListType, int RecordNum, CheckBox chkRequired, TextBox txtComplete, TextBox txtMemo) {
     fillCheckList(ListType, RecordNum, chkRequired, txtComplete, txtMemo, null);
}
public static void fillCheckList(string ListType, int RecordNum, CheckBox chkRequired, TextBox txtComplete,TextBox txtMemo,TextBox txtMemo, TextBox txtMemo) {
     // implementation
}
  1. открытый статический void fillCheckList (строка ListType, int RecordNum, CheckBox chkRequired, IEnumerable textBoxes) { // реализация }

3.

public static void fillCheckList(string ListType, int RecordNum, CheckBox chkRequired, params TextBox[] textBoxes) {
         // implementation
    }

Вариант 1. подходит, если вам нужно добавить разных участников и у вас есть ограниченный набор возможностей.

Вариант 2. все в порядке. Но не такой элегантный, как 3.

Вариант 3. Возможно, лучше всего сделать, если добавленные параметры имеют общего предка - объект, если он должен быть. Помните, что параметр всегда должен быть последним параметром.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...