首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TryParse与变量

TryParse与变量
EN

Stack Overflow用户
提问于 2013-11-15 15:03:22
回答 3查看 1.7K关注 0票数 0

我只是在学习C#,我试图了解更多关于TryParse的知识,以及它是如何与已建立的变量相关和相互作用的。在下面的例子中,我只是简单地确认文本框中的值是否确实是小数,它们是否在给定的范围内。否则,我将调用显示错误消息的BadInput()方法。

代码语言:javascript
复制
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,然后在其他方法中使用它们作为输入或参数?如果是的话,是如何做到的?我读了很多关于外传的文章,我只是不明白它们是如何工作的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-15 15:05:26

OUT在TryParse中做什么?它是否将Val1设置为文本框的内容?

它将Val设置为由传递给第一个参数的字符串表示的decimal (在您的示例中是TextBox值)。

out意味着该函数的输出将存储在该变量中。它是int.Parse使用的返回值的替代方法:

代码语言:javascript
复制
decimal val = decimal.Parse("123");

由于函数只能返回一个值,所以MS选择返回一个bool并使用一个out参数来解析结果,而不是返回复合结构或使用bool作为out参数:

代码语言:javascript
复制
bool isSussessful;
decimal val = int.TryParse("123", out isSuccessful);

但是,这将阻止将解析内联为if语句。

您的错误是由于没有首先声明Val1而导致的:

代码语言:javascript
复制
    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))
        {

是否可以分析和检查变量Val1Val2Val3,然后在其他方法中将它们用作输入或参数?

当然-就像其他变量一样。out只在将变量传递到函数时起作用(使用ref必须初始化变量,而使用out则不初始化变量)。

票数 4
EN

Stack Overflow用户

发布于 2013-11-15 15:10:39

以参数的方法为前缀的out关键字意味着被调用的方法应该以某种方式初始化变量(例如,textbox中的无效值会导致valX参数被初始化为零)。当然,变量在TryParse之后的调用方法中是可用的,因此可以用作其他方法或函数的参数。

代码语言:javascript
复制
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();
票数 1
EN

Stack Overflow用户

发布于 2013-11-15 15:30:13

1)默认情况下,C#通过值传递参数。Out允许通过引用而不是通过值传递参数。实际上,这意味着您传递给函数的值可以在其中修改。

回答你的问题:

如果TryParse返回true:那么textbox的值被成功地解析并分配给Val1。如果它返回false:则转换失败,Val1 (或Val2,或您试图解析的任何东西)的值将为零

2) Out仅仅意味着它们的引用被传递给函数(并且它们的值可能被修改)。除此之外,您还可以将它们作为普通变量来处理(因为它们就是这样的)。

例如,这样做是完全有效的:

代码语言:javascript
复制
if (decimal.TryParse(Val1Box.Text, out Val1)&& (Val1<=100) && (Val1>=0))
{
   GoodInput(Val1);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20004045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档