我只是在学习C#,我试图了解更多关于TryParse的知识,以及它是如何与已建立的变量相关和相互作用的。在下面的例子中,我只是简单地确认文本框中的值是否确实是小数,它们是否在给定的范围内。否则,我将调用显示错误消息的BadInput()方法。
private void VerifyNums()
{
if (decimal.TryParse(Val1Box.Text, out Val1)&& (val1<=100) && (Val1>=0))
{
if (decimal.TryParse(Val2Box.Text, out Val2) && (Val2 <=100) && (Val2 >=0))
{
if (decimal.TryParse(Val3.Text, out Val3) && (Val3 <100) && (Val3 >=0))
{
GoodInput();
}
else
{
BadInput();
}
}
else
{
BadInput();
}
}
else
{
BadInput();
}
}第一个问题: OUT在TryParse中做什么?它是否将Val1设置为文本框的内容?
第二个问题:是否可以分析和检查变量Val1、Val2和Val3,然后在其他方法中使用它们作为输入或参数?如果是的话,是如何做到的?我读了很多关于外传的文章,我只是不明白它们是如何工作的。
发布于 2013-11-15 15:05:26
OUT在TryParse中做什么?它是否将Val1设置为文本框的内容?
它将Val设置为由传递给第一个参数的字符串表示的decimal (在您的示例中是TextBox值)。
out意味着该函数的输出将存储在该变量中。它是int.Parse使用的返回值的替代方法:
decimal val = decimal.Parse("123");由于函数只能返回一个值,所以MS选择返回一个bool并使用一个out参数来解析结果,而不是返回复合结构或使用bool作为out参数:
bool isSussessful;
decimal val = int.TryParse("123", out isSuccessful);但是,这将阻止将解析内联为if语句。
您的错误是由于没有首先声明Val1而导致的:
decimal Val1;
if (decimal.TryParse(Val1Box.Text, out Val1)&& (Val1<=100) && (Val1>=0))
{
decimal Val2;
if (decimal.TryParse(Val2Box.Text, out Val2) && (Val2 <=100) && (Val2 >=0))
{是否可以分析和检查变量
Val1、Val2和Val3,然后在其他方法中将它们用作输入或参数?
当然-就像其他变量一样。out只在将变量传递到函数时起作用(使用ref必须初始化变量,而使用out则不初始化变量)。
发布于 2013-11-15 15:10:39
以参数的方法为前缀的out关键字意味着被调用的方法应该以某种方式初始化变量(例如,textbox中的无效值会导致valX参数被初始化为零)。当然,变量在TryParse之后的调用方法中是可用的,因此可以用作其他方法或函数的参数。
bool v1Good = decimal.TryParse(Val1Box.Text, out Val1);
bool v2Good = decimal.TryParse(Val2Box.Text, out Val2);
bool v3Good = decimal.TryParse(Val3.Text, out Val3);
if(v1Good && v2Good && v3Good)
{
if(val1 >=0 && val1 <= 100 && val2 >= 0 && val2 <=100 && val3 >= 0 && val3 <= 100)
{
// You could pass them to the GoodInput method
GoodInput(val1, val2, val3);
}
else
BadInput();
}
else
BadInput();发布于 2013-11-15 15:30:13
1)默认情况下,C#通过值传递参数。Out允许通过引用而不是通过值传递参数。实际上,这意味着您传递给函数的值可以在其中修改。
回答你的问题:
如果TryParse返回true:那么textbox的值被成功地解析并分配给Val1。如果它返回false:则转换失败,Val1 (或Val2,或您试图解析的任何东西)的值将为零。
2) Out仅仅意味着它们的引用被传递给函数(并且它们的值可能被修改)。除此之外,您还可以将它们作为普通变量来处理(因为它们就是这样的)。
例如,这样做是完全有效的:
if (decimal.TryParse(Val1Box.Text, out Val1)&& (Val1<=100) && (Val1>=0))
{
GoodInput(Val1);
}https://stackoverflow.com/questions/20004045
复制相似问题