我需要检查大量控件是否包含值,或者是否将它们留空。
我希望能做到这样的事情:
public static bool IsObjectEmpty(Control ctrlThis)
{
switch (ctrlThis)
{
case ctrlThis is TextBox:
TextBox txtThis = (TextBox)ctrlThis;
if (txtThis.Text == "" || txtThis.Text == null)
{ return false; }
break;
case (ctrlThis is ComboBox):
ComboBox cboThis = (ComboBox)ctrlThis;
if (cboThis.SelectedValue == -1)
{ return false; }
break;
case (ctrlThis is NumericUpDown):
NumericUpDown numThis = (NumericUpDown)ctrlThis;
if (numThis.Value == 0)
{ return false; }
break;
etc etc...
但是这不能编译:
Error 3 A switch expression or case label must be a bool, char, string,
integral, enum, or corresponding nullable type
有没有办法在switch语句中执行此操作,或者我只需要加载if / else if stuff?谷歌和StackOverflow搜索没有发现任何用途。
答案 0 :(得分:2)
Case
标签只能包含 常量表达式。
所以在你的回答中不是const表达式。
这是一个评估值。
就像你做不到的一样
public const int a=Enumerable.Range(0,2).First();
你可以在切换案例之前计算这些值
然后将它们与值进行比较。
类似
var t=(ctrlThis is ComboBox)
...
...
switch ( t) ...
case true :...
switch-label:
case constant-expression :
default :
如果你不这样做,编译器会尖叫:
预期值为常量
示例:
switch (myInt)
{
case (2+Enumerable.Range(0,2).First()):
return true;
default:
return true;
}
答案 1 :(得分:2)
基于类型的条件(if / switch)主要是一个坏主意。
这种方法怎么样:
public static bool IsObjectEmpty(TextBox ctrlThis)
{
if (ctrlThis.Text == "" || ctrlThis.Text == null) {
return false;
}
etc etc...
}
public static bool IsObjectEmpty(ComboBox ctrlThis)
{
if (ctrlThis.SelectedValue == -1) {
return false;
}
etc etc...
}
public static bool IsObjectEmpty(NumericUpDown ctrlThis)
{
if (ctrlThis.Value == 0) {
return false;
}
etc etc...
}
答案 2 :(得分:1)
你可以这样做:
switch (ctrlThis.GetType().ToString())
{
case "System.Windows.Forms.TextBox" :
TextBox txtThis = (TextBox)ctrlThis;
if (txtThis.Text == "" || txtThis.Text == null)
{ return false; }
break;
}
答案 3 :(得分:0)
据我所知,你可以这样做
public static bool IsObjectEmpty(Control ctrlThis)
{
Type t = ctrlThis.GetType();
switch (t)
{
case typeof(TextBox):
TextBox txtThis = (TextBox)ctrlThis;
if (txtThis.Text == "" || txtThis.Text == null)
{ return false; }
break;
}
}
答案 4 :(得分:0)
我也可以去if语句,例如:
public static bool IsObjectEmpty(Control ctrlThis)
{
if (ctrlThis is TextBox)
{
TextBox txtThis = (TextBox)ctrlThis;
if (txtThis.Text == "" || txtThis.Text == null)
return false;
}
else if (ctrlThis is ComboBox)
{
ComboBox cboThis = (ComboBox)ctrlThis;
if (int.Parse(cboThis.SelectedValue.ToString()) == -1)
return false;
}
else if (ctrlThis is NumericUpDown)
{
NumericUpDown numThis = (NumericUpDown)ctrlThis;
if (numThis.Value == 0)
return false;
}
else
{
//Serves as 'default' in the switch
}
return true;
}