单个方法接受3个参数或4个参数

时间:2010-03-05 14:29:51

标签: c# methods

    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();
            }
        }
    }

正如您所看到的,我为项目ID提供了一个整数变量,为列表类型提供了一个字符串变量,以及2个文本框类型。 我因此使用这种方法接受4个参数..我想要做的是我也希望它接受5个参数。那是..还包括一个文本框.. 所以它要么相应需要4个参数或5个参数/ 我怎么用同样的方法做到这一点。

6 个答案:

答案 0 :(得分:10)

不要使用params。

使用参数来表示“我可以使用零,一个或任意多个额外参数。听起来你想要零或一个额外的参数。

TJMonk15是对的;你应该使用一个可选参数(在C#4中),或者写两个方法,让其中一个方法用额外参数的默认值调用另一个方法。优选后者。

(为了善良的缘故,修复了SQL注入漏洞!)

答案 1 :(得分:3)

如果您使用的是c#4.0,则可以使用Optional Arguments。如果没有,你应该使用方法重载并使用一个重载来调用另一个带有最后一个参数的默认值。

答案 2 :(得分:2)

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    
}

答案 3 :(得分:1)

检查关键字params

答案 4 :(得分:1)

你可以使用参数,但它要求你有一个随机数量的相同类型的参数或者有一个松散类型的参数集合(对象)

您还可以使用5个参数编写函数,并提供带有4个参数的重载方法,这些参数调用前者并默认为最后一个参数。

public static void fillCheckList(string ListType, int RecordNum, CheckBox chkRequired, TextBox txtComplete)
        {
            fillCheckList(ListType, RecordNum, chkRequired, txtComplete, null);
        }

答案 5 :(得分:0)

您有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. public static void fillCheckList(string ListType,int RecordNum,CheckBox chkRequired,IEnumerable textBoxes){          //实施     }

  2. 3

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

    选项1.如果你需要添加不同的成员并且你有一组有限的可能性,那就没问题了。

    选项2.没问题。但不像3那样优雅。

    选项3.也许是最好的事情,只要添加的参数有一个共同的祖先 - 对象必须是。请记住,params总是必须是最后一个参数。