문제

나는 현재 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를 통해 TextBox.Text를 전달하고 함수 내부에서 변경하는 방법이 있습니까?

도움이 되었습니까?

해결책

Ref, 필드 또는 변수 만 재산을 전달할 수 없습니다.

에서 MSDN :

속성은 변수가 아닙니다. 실제로 방법이므로 Ref 매개 변수로 전달할 수 없습니다.

중간 변수를 사용해야합니다.

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

다른 팁

"전체"텍스트 상자를 통과한다는 것은 무엇을 의미합니까? 당신의 서명이 있다면 public int function(int a, int b, TextBox textBox) 그러면 당신이 통과하는 것은 참조입니다. 이는 전혀 데이터가 많지 않습니다. 서명을하는 경우 public int function(int a, int b, ref string text), 텍스트 box.text를 전달하는 경우에도 여전히 문제가 있습니다. 텍스트 속성에서 백업 필드 사본을 사용하여 메소드가 업데이트되지 않기 때문에 여전히 문제가 있습니다.

전체 텍스트 상자를 전달하고 싶지 않습니까? Ref ... Like : Pass in Pass입니다.

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

Ref. 당신은 그것을 복사 할 수 있습니다 .Text 문자열에 속성을 한 다음 해당 문자열을 참조로 전달합니다.

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

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

문제는 당신이 통과하려고한다는 것입니다. 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;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top