2012-08-01 85 views
0

我有一个简单的方法,我想通过一个标签。通过参考传递标签

现在,通过我的阅读,任何基于关闭对象类应参照自动传递,所以这是我第一次尝试在我的方法:

 public static void ValiateStepAsInt(String Step, int? Value, Label Error) 
     { 
      if (Value == null && Step != "") 
      { 
       Error.Text = "Error!!!"; 
       return; 
      } 
      Error.Text = ""; 
     } 

我没有得到任何compilor错误,但每当我调用这个,它会设置Error.text,但是一旦它离开了方法,那个值就会消失(所以不是真的通过引用传递)。

因此,接下来我将“ref”选项添加到Label Error;希望这可以解决问题,但仍然是同样的事情,该方法设置它,但一旦完成,价值消失。

当我试图通过引用传递标签时缺少什么?

+2

除了你失去的错误,你的“按引用传递”的理解是错误的。请阅读http://pobox.com/~skeet/csharp/parameters.html – 2012-08-01 13:30:34

+0

@JonSkeet:感谢您的好阅读材料 – Limey 2012-08-01 13:41:36

回答

7

您正在将Text属性重置为条件语句正下方的空字符串。也许你想将Error.Text = "";换成else

如果不是这样,那么也许您将值设置在其他地方,从而覆盖您在此处显示的方法中的更改。

+0

哦!我原来的方法是回报!我忘了添加其他逻辑! D'哦! – Limey 2012-08-01 13:31:15

3

不是因为这行代码的消失值:

Error.Text = ""; 

只是在方法返回之前要设置标签为空字符串。

也许你意味着要做到这一点:

public static void ValiateStepAsInt(String Step, int? Value, Label Error) 
{ 
    if (Value == null && Step != "") 
    { 
     Error.Text = "Error!!!"; 
    } 
    else 
    { 
     Error.Text = ""; 
    } 
} 
从*实际*原因
+0

是的,我搞砸了。在我原来的函数中,我忘了在else语句中添加! – Limey 2012-08-01 13:33:27