并非所有路径都在switch中返回值

时间:2015-11-30 18:58:06

标签: c#

即使我已经有default子句

,我仍然会收到错误
bool Validate(TextBox textBox , string type)
           // textboxL - textbox accept only letters of alphabets and space.Is Mandatory
           // textboxS - textbox accept  letters of alphabets , space , - , _  .Is Mandatory
          // return true by default
        {
            switch(type)
            {
                case "textboxL":
                    if (!Regex.IsMatch(textBox.Text, @"^[a-zA-Z]+$") || String.IsNullOrEmpty(textBox.Text)) {
                        MessageBox.Show("Invalid!!" + textBox.Text + "must  contain only letters and shouldn't be empty");
                        return false;
                    }  
                    break;
                case "textboxS":
                    if (!Regex.IsMatch(textBox.Text, @"^[a-zA-Z-_ ]+$") || String.IsNullOrEmpty(textBox.Text)) { 
                        return false; 
                    }
                    break;
                default: return true; 
            }
        }

2 个答案:

答案 0 :(得分:3)

如果type=="textboxL"且内部条件为假,则您的函数不会返回任何值。与"textboxS"相同。

请注意,default仅在我们未进入其他case时被调用(在这种情况下,您在每个break末尾使用case )。

根据您的逻辑,您可能希望在功能结束时return true

答案 1 :(得分:0)

交换机中的if子句缺少else

switch(type) {
    case "A" : if (condition) return true; else return false; break;
    case "b" : if (condition) return true; else return false; break;
...
...
}

这样,如果不满足任何一种情况,你也会返回一个值。