2015-03-25 194 views
-2

我想分配一個布爾參數到一個任務,但我不知道如何分配到一個assigment將參數賦值給賦值?

這是我的代碼。

private string ReadName(out bool success) 
     { 
      string name = ""; 

      success = name = Nametxt.Text; // not working because of two equal signs 


      return name; 
     } 

我可以用int變量來做到這一點。這是我用int做的。

private int ReadAge(out bool success) 
     { 
      int age = 0; 

      success = int.TryParse(Agetxt.Text, out age); 

      if (!success) 
       MessageBox.Show("The entered age is not valid!"); 

      return age; 
     } 

而且它有沒有辦法讓ReadName方法打印錯誤(如ReadAge方法)如果名稱變量返回非字母值?

謝謝

+0

什麼不工作?你想在你的方法中做什麼?什麼決定成敗? – 2015-03-25 01:06:06

+0

第一個不編譯,因爲成功是一個'bool',名稱是一個'字符串',而不是「因爲兩個等號」。 – 2015-03-25 01:09:19

+0

@ Selman22我不知道如何將成功分配給'name = Nametxt.Text;'。目的是檢查來自用戶的輸入。 – Simon 2015-03-25 01:12:16

回答

3

C#中的賦值返回賦值的值。您注意到的問題不是因爲有兩個等號,而是因爲類型不匹配。

例如,這將產生與直接調用NameTxt.Text獲得者相同的值。

Console.WriteLine(name = NameTxt.Text); 

返回的值也是相同類型的分配。

正如我不能說,

bool testBoolean = "true"; 

不能分配一個字符串賦值給一個bool輸出參數的結果。

如果你想要驗證輸入,你必須提供一些做驗證的方法。例如,

name = NameTxt.Text; 

success = name == "yes"; 

或者

success = Regex.IsMatch(name, @"\d"); 

不管你用什麼方法驗證,你需要指定它。你不能依靠編譯器來知道你希望完成什麼。

原因int.TryParse返回一個bool是因爲解析一個int並不總是工作 - 字符串幾乎可以包含任何東西,但只有很少幾組字符可以正確映射爲整數。這是一種內置的驗證形式。

+0

謝謝詳細解釋 – Simon 2015-03-25 01:22:52

1

分配一個字符串值,將不會失敗,所以你可以設置變量true如果你需要它。您不需要爲值的變量或者,只是返回值:

private string ReadName(out bool success) 
{ 
    success = true; 
    return Nametxt.Text; 
} 
+0

謝謝,這非常有幫助。堅定不移! – Simon 2015-03-25 01:16:59

0

這聽起來像你正在尋找類似int.TryParse一個字符串,其中如果有任何數字會失敗的東西(或非字母字符)。

您可以使用正則表達式來測試字母字符,如下所示。 IsMatch方法將根據表達式測試輸入字符串,如果所有字符僅爲a-z或A-Z,則返回true。

private string ReadName(out bool success)  
{ 
    string name = ""; 

    success = Regex.IsMatch(Nametxt.Text, "^[a-zA-Z]+$"); 

    if (!success) 
     MessageBox.Show("The entered name is not valid!"); 
    else 
     name = Nametxt.Text; 

    return name;   
} 
+0

非常感謝,這很有幫助! – Simon 2015-03-25 01:17:56

+0

當然。你可以在方括號中放置任何'有效'的字符,所以如果你想允許一個空格,你可以在小寫和大寫之間加一個空格,例如:'「^ [az AZ] + $' – 2015-03-25 01:22:02