我目前有一些东西需要通过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并在函数内部更改它?
答案 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;