通过Ref Textbox.Text传递

时间:2010-01-08 15:54:56

标签: c# byref

我目前有一些东西需要通过ref传递textbox.text。我不想传递整个文本框,我希望函数更改文本以及返回其他变量。

    public int function(int a, int b, string text)
    {
        //do something

        if (a + b > 50)
        {
            text = "Omg its bigger than 50!";
        }

        return (a + b);
    }

有没有办法通过ref传递Textbox.text并在函数内部更改它?

5 个答案:

答案 0 :(得分:6)

您不能通过ref传递属性,只能传递字段或变量。

来自MSDN

  

属性不是变量。它们实际上是方法,因此不能作为ref参数传递。

您必须使用中间变量:

string tmp = textBox.Text;
int x = function(1, 2, ref tmp);
textBox.Text = tmp;

答案 1 :(得分:2)

你是什么意思通过“整个”文本框?如果您的签名是public int function(int a, int b, TextBox textBox),那么您传递的所有内容都是参考,这根本就没有多少数据。如果您签名public int function(int a, int b, ref string text),如果传递textBox.Text仍然有问题,因为您仍将使用Text属性中的支持字段副本,因此您的方法不会更新。

答案 2 :(得分:1)

为什么不想传递整个文本框?它通过参考... 像:

public int function(int a, int b, TextBox textb)
{
    //do something

    if (a + b > 50)
    {
        textb.text = "Omg its bigger than 50!";
    }

    return (a + b);
}

答案 3 :(得分:1)

您无法通过ref传递属性。您可以将.Text属性复制到字符串,然后通过ref:

传递该字符串
void foo()
{
    string temp = MyTextBox.Text;
    int result = refFunction(ref temp);
    MyTextBox.Text = temp;
}

int refFunction(ref string text)
{ ... }

答案 4 :(得分:0)

我认为问题在于您尝试将TextBox.Text传递给函数的第二个参数(假设您已修改它以通过引用获取字符串)。通过引用传递字符串是完全有效的,但是属性不能通过引用传递。您可以做的最好的事情是将文本分配给另一个字符串,传递,然后将文本设置回TextBox:

public int function(int a, int b, ref string text)
{
    //do something

    if (a + b > 50)
    {
        text = "Omg its bigger than 50!";
    }

    return (a + b);
}

string text = TextBox.Text;
function(ref text);
TextBox.Text = text;