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);
    }

Textbox.text を ref で渡し、関数内で変更する方法はありますか?

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)あなたが渡すのは参照だけであり、これはまったく多くのデータではありません。signature を作成し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問題は、関数の 2 番目のパラメーターに渡そうとしていることだと思います (参照によって文字列を取得するように変更したと仮定します)。文字列を参照渡しすることは完全に有効ですが、プロパティは参照渡しできません。あなたができる最善の方法は、テキストを別の文字列に割り当て、それを渡し、その後テキストを 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 に答える