c#4.0-c#方法中参数的类型
本文关键字:类型 参数 0-c# 方法 c#4 | 更新日期: 2023-09-27 18:00:08
我有一个方法
public string GetValue(TextBox txt, DropdownList ddl)
{
if(txt != null)
return txt.text;
else
return ddl.SelectedValue;
}
我只能为另一个参数传递textbox或ddl和null。如何解决此问题?我动态地调用该方法,并且一次存在TextBox或DDl。因此,基于此,我必须从该控件返回值。
我收到一些错误消息,因为当我传递Null时,方法有无效的参数。
我只能为另一个参数传递textbox或ddl和null。如何解决此问题?
如果这是您要强制执行的业务规则,您不解决它,而是更改它。使用方法重载只接受您实际要使用的参数类型。
public string GetValue(TextBox tb)
public string GetValue(DropDownList ddl)
我认为不应该使用这样的方法。
从签名你有一些代码像
var value = GetValue(txtMyText, null);
将值设置为txtMyText.Text;
或者你有
var value = GetValue(null, ddlMyList);
将值设置为ddl.SelectedValue;
这里的问题是这会删除可读性。当我阅读你的代码时,我看到你在做GetValue(),但我不知道为什么你在一些参数中传递null。
事实上,这是相当清楚的,当阅读代码时只看到:
var value = txtMyTextBox.Text;
var dropDownValue = ddlMyList.SelectedValue;
制作这个方法并没有那么有用,因为你必须处理每一种控件类型。类已经有了获取其值的方法,而您试图编写一个实用程序方法来获取值,而不管类类型如何,这会掩盖实际发生的事情。
此外,如果向该方法添加更多类型,则最终将执行if/Else,直到找到类型并返回值。这会导致不必要的CPU周期,尤其是因为您在设计时就已经知道了类型(因为您为一个参数传递了null)。
如果您想传递许多参数,可以使用param关键字
public string GetValue(params object[] controls)
{
foreach (var item in controls)
{
if (item != null)
{
if (item is TextBox)
return (item as TextBox).Text;
if (item is CheckBox)
return (item as CheckBox).Checked.ToString();
if (item is DropDownList)
return (item as DropDownList).SelectedValue.ToString();
}
}
return string.Empty;
}
并将该方法称为此
GetValue(TextBox1);
GetValue(DropDownList1);
GetValue(CheckBox1);
GetValue(null,DropDownList1);
GetValue(TextBox1,DropDownList1);
GetValue(TextBox1,DropDownList1,CheckBox1);
每个控件都继承类control
。所以一个参数就足够了。你只需要确定类型:
public string GetValue(Control ctl) {
if (ctl != null) {
//Textbox
if (ctl is TextBox) return ctl.Text;
//Combobox
if (ctl is ComboBox) {
ComboBox cb = ctl as ComboBox;
return cb.SelectedText;
}
//...
}
//Default Value (You can also throw an exception
return "";
}