2017-09-25 109 views
0

不返回以下代碼中的結果。以下代碼中缺少什麼。 如果所有(dropdownlist或textbox)控件都不爲空,它應該返回true。 或者如果全部爲空則返回false。 我是新來的c#所以請幫助。以下代碼不返回結果值。缺少什麼

bool IsValidate(Control c,bool result) 
    { 
     foreach (Control x in c.Controls) 
     { 
      IsValidate(x,result); 
     } 
     if (c is DropDownList) 
     { 
      DropDownList d = (DropDownList)c; 
      if (d.SelectedValue.Equals("0") || d.SelectedValue.Equals("")) 
      { 
       result = false; 
      } 
      else 
      { 
       result = true; 
      } 
     } 
     if (c is TextBox) 
     { 
      TextBox t = (TextBox)c; 

      if (t.Text.Equals("")) 
      { 
       result = false; 
      } 
      else 
      { 
       result = true; 
      } 
     } 
     return result; 
} 
+0

我看到你正在做一些遞歸。 'foreach(c.Controls中的Control x)IsValidate(x,result);' 你打算這麼做嗎?你用調試器完成了它嗎? –

+0

請問你可以把你從哪個代碼中調用這個方法,這將有助於正確理解你的代碼。 –

+1

另外,'bool result'作爲函數參數沒有意義。你可以用'bool result = false;'在你的函數中定義它。 C#通過值傳遞原始值,例如布爾值,而不是通過引用。 –

回答

0

您必須在驗證失敗後立即返回結果。您繼續驗證可能將結果變量設置爲true的其他控件。我會改變你的代碼,這可能會有所幫助:

//You dont need another parameter 
bool IsValidate(Control c) 
{ 
    foreach (Control x in c.Controls) 
    { 
     var result = IsValidate(x); 

     //Return instantly if validation failed 
     if (!result) return false; 
    } 
    if (c is DropDownList) 
    { 
     DropDownList d = (DropDownList)c; 
     return !(string.IsNullOrEmpty(d.SelectedValue) || d.SelectedValue.Equals("0")); 
    } 
    else if (c is TextBox) 
     return !string.IsNullOrEmpty(((TextBox)c).Text); 

    //Return true if control is neither a textbox or dropdownlist 
    return true; 
} 
+0

在if語句中使用「as」(Type)來代替轉換 –