2015-03-25 153 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