C# 通过引用传递文本框

C# 通过引用传递文本框,c#,byref,C#,Byref,我目前有一些东西,我想传递一个textbox.text by ref。我不想传递整个textbox,我希望函数在返回其他变量的同时更改文本 public int function(int a, int b, string text) { //do something if (a + b > 50) { text = "Omg its bigger than 50!"; }

我目前有一些东西,我想传递一个textbox.text by ref。我不想传递整个textbox,我希望函数在返回其他变量的同时更改文本

    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并在函数中更改它?

传递“整个”Textbox是什么意思?如果您的签名是
public int function(int a,int b,TextBox TextBox)
,那么您传递的只是一个引用,它根本不是很多数据。如果将签名
设为公共int函数(int a、int b、ref string text)
,则在传递textBox.text时仍会出现问题,因为您仍将使用text属性的备份字段副本,因此方法不会更新

不能按ref传递属性,只能传递字段或变量

    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参数传递

必须使用中间变量:

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

你为什么不想传递整个文本框?这是传递参考。。。 比如:


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

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;

不能按引用传递属性。可以将
.Text
属性复制到字符串,然后按引用传递该字符串:

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

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

对我来说,这听起来像是你的设计有问题……如果你传递TextBox引用,该方法也将能够更改TextBox的其他属性……这就是我的想法。谢谢