IT TIP

C #에서 속성을 'out'매개 변수로 전달

itqueen 2020. 10. 19. 13:48
반응형

C #에서 속성을 'out'매개 변수로 전달


내가 가지고 있다고 가정합니다.

public class Bob
{
    public int Value { get; set; }
}

Value 멤버를 다음과 같은 out 매개 변수로 전달하고 싶습니다.

Int32.TryParse("123", out bob.Value);

하지만 컴파일 오류가 발생합니다. " 'out'인수는 변수로 분류되지 않습니다." 이것을 달성하는 방법이 있습니까, 아니면 변수를 추출해야합니까?

int value;
Int32.TryParse("123", out value);
bob.Value = value;

자동 구현 속성 대신 필드와 "일반"속성을 명시 적으로 사용해야합니다.

public class Bob
{
    private int value;
    public int Value
    { 
        get { return value; } 
        set { this.value = value; }
    }
}

그런 다음 필드 를 out 매개 변수로 전달할 수 있습니다 .

Int32.TryParse("123", out bob.value);

그러나 물론 필드가 비공개이므로 동일한 클래스 내에서만 작동합니다 (그리고 그래야합니다!).

속성은이 작업을 허용하지 않습니다. 참조로 속성을 전달하거나 out 매개 변수로 사용할 있는 VB에서도 기본적으로 추가 임시 변수가 있습니다.

의 반환 값에 대해 신경 쓰지 않았다면 TryParse언제든지 고유 한 도우미 메서드를 작성할 수 있습니다.

static int ParseOrDefault(string text)
{
    int tmp;
    int.TryParse(text, out tmp);
    return tmp;
}

그런 다음 다음을 사용하십시오.

bob.Value = Int32Helper.ParseOrDefault("123");

이렇게하면 여러 위치에서이 작업을 수행해야하는 경우에도 단일 임시 변수를 사용할 수 있습니다.


당신은 그것을 달성 할 수 있지만 속성으로는 불가능합니다.

public class Bob {
    public int Value { get; set; } // This is a property

    public int AnotherValue; // This is a field
}

당신은 사용할 수 없습니다 outValue,하지만 당신은에 있습니다 AnotherValue.

이것은 작동합니다

Int32.TryParse("123", out bob.AnotherValue);

그러나 공통 지침에서는 클래스 필드를 공개하지 말라고합니다. 따라서 임시 변수 접근 방식을 사용해야합니다.

참고 URL : https://stackoverflow.com/questions/1370238/passing-a-property-as-an-out-parameter-in-c-sharp

반응형