3

我目前有一些我想通过 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 并在函数内更改它?

4

5 回答 5

7

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

来自MSDN

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

您必须使用中间变量:

string tmp = textBox.Text;
int x = function(1, 2, ref tmp);
textBox.Text = tmp;
于 2010-01-08T16:01:05.033 回答
2

你是什​​么意思通过“整个”文本框?如果您的签名是,public int function(int a, int b, TextBox textBox)那么您传递的只是一个参考,这根本不是很多数据。如果您进行签名public int function(int a, int b, ref string text),则在传递 textBox.Text 时仍然会遇到问题,因为您仍将使用 Text 属性中的支持字段的副本,因此您的方法不会更新。

于 2010-01-08T15:57:01.320 回答
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);
}
于 2010-01-08T16:01:37.707 回答
1

您不能通过 ref 传递属性。您可以将该属性复制.Text到一个字符串,然后通过 ref 传递该字符串:

void foo()
{
    string temp = MyTextBox.Text;
    int result = refFunction(ref temp);
    MyTextBox.Text = temp;
}

int refFunction(ref string text)
{ ... }
于 2010-01-08T16:01:50.140 回答
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;
于 2010-01-08T16:01:46.270 回答