我正在尝试为作业分配一个bool参数,但我不知道如何分配给一个分配
这是我的代码。
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;
}
如果name变量返回非字母值,还有一种方法可以使ReadName方法打印错误(如ReadAge方法)吗?
谢谢
答案 0 :(得分:3)
C#中的赋值返回分配的值。你注意到的问题不是因为有两个等号,而是因为类型不匹配。
例如,这将产生与直接调用NameTxt.Text
getter相同的值。
Console.WriteLine(name = NameTxt.Text);
返回的值也与赋值类型相同。
正如我不能说的那样,
bool testBoolean = "true";
您无法将字符串赋值的结果分配给bool
输出参数。
如果您希望验证输入,则必须提供某种方式进行验证。例如,
name = NameTxt.Text;
success = name == "yes";
或者
success = Regex.IsMatch(name, @"\d");
无论您使用何种验证方法,都需要指定它。您不能依赖编译器来了解您希望实现的目标。
int.TryParse
返回bool
的原因是因为解析int并不总是有效 - 字符串几乎可以包含任何内容,但是很少有字符集可以正确映射到整数。这是一种内置的验证形式。
答案 1 :(得分:1)
分配字符串值不会失败,因此您可以根据需要将变量设置为true
。您不需要该值的变量,只需返回值:
private string ReadName(out bool success)
{
success = true;
return Nametxt.Text;
}
答案 2 :(得分: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;
}