2017-12-15 21 views
5

메서드에서 반환되지 않지만 출력 매개 변수 인 튜플을 분해 할 수 있습니까? 나는 정확하게 자신을 표현하거나 적절한 용어를 사용하고 있는지 확신 할 수 없으므로 다음은 몇 가지 예입니다.ValueTuple 매개 변수를 해체 할 수 있습니까?

void OutMethod(out (int aNumber, string someText) output) 
    => output = (15, "yo"); 

void Usage() 
{ 
    { 
     // Works, of course. 
     OutMethod(out var tuple); 

     // But *slightly* aesthetically unappealing to use. 
     var usage = $"{tuple.someText}: {tuple.aNumber}"; 
    } 

    { 
     // Would be awesome, but doesn't work. 
     OutFunction(out var(number, text)); 
    } 

    { 
     // Would be awesome too, but doesn't work. 
     OutFunction(out (var number, var text)); 
    } 

    { 
     // This doesn't work either. 
     OutFunction((out var number, out var text)); 
    } 

    { 
     // Not even this. 
     OutFunction((out int number, out string text)); 
    } 

    { 
     // Or this. 
     OutMethod(out (int number, string text)); 
    } 

    { 
     // Or this. 
     int number; 
     string text; 
     OutMethod(out (number, text)); 
    } 
} 

BTW, 불평하지 않습니다. 내가 뭔가를 놓치고 있는지 궁금해.

+0

두 개의 다른 'out'변수를 쉽게 만들 수 있기 때문에 'out'매개 변수에서 튜플 해체를 허용하는 것이 무의미하다는 것을 알 수 있습니다. – DavidG

+0

@DavidG 제네릭 형식이 아닙니다. 이것은'Dictionary '에서 가능한 한 우아하게'TryGetValue'를 사용하려고했기 때문에 제 경우에 나타났습니다. –

+0

그 시점에서, 아마도 튜플이 어쨌든 사용하기에 적합한 유형인지 궁금 할 것입니다. 아마도 구조체 또는 클래스가 더 적절할 것입니까? – DavidG

답변

6

현재로서는 불가능합니다. Further, according to this comment on the CSharplang github repo :

이것은 우리가 차적으로 분류했고 ... 적어도 가까운 미래에 대한, 일에 대해

을 결정했을 때 [언어 디자인 회의] 그래서 가능성이 높습니다 우리가 LDM에 갔다 것이었다 잠시 동안은 "남아있을 수 없다".