2017-03-19 7 views
8

새 튜플 기능으로 C#에서 오류가 발생했습니다. 튜플 값을 결정하기 위해 삼항 연산자를 사용한다면, 괄호로 묶어야합니다. 메서드 호출에서 이것이 사실이 아니기 때문에 나는 이것을 기대하지 않았다.C에서 튜플을 만들 때 괄호없이 컴파일 오류가 발생했습니다.

이유가 있습니까? 아니면 버그입니까?

설정 :

  • 비주얼 스튜디오 2017
  • 닷넷 표준 1.6 클래스 라이브러리
  • System.ValueTuple (V4.3.0 - Nuget에서)

내 코드 :

public class Test 
{ 
    public bool Ok { get; set; } 
    public string Text { get; set; } 
} 

public class Class1 
{ 
    public void TestMethod() 
    { 
     // 
     // FROM OBJECT 
     // 
     Test obj = new Test() { Ok = true, Text = "asdf" }; 

     StringMethod(true, obj.Ok ? obj.Text : "fsda");  // <-- OK 
     var result1 = (true, obj.Ok ? obj.Text : "fsda"); // <-- Error 
     var result2 = (true, (obj.Ok ? obj.Text : "fsda")); // <-- OK (Same as line above, but with addional brackets) 


     // 
     // FROM OTHER TUPLE 
     // 
     var tuple = OtherTuple(); 

     StringMethod(true, tuple.ok ? tuple.text : "fdsa");  // <-- OK 
     var result3 = (true, tuple.ok ? tuple.text : "fdsa"); // <-- Error 
     var result4 = (true, (tuple.ok ? tuple.text : "fdsa")); // <-- OK (Same as line above, but with addional brackets) 
    } 

    public void StringMethod(bool state, string anyString) 
    { 

    } 

    public (bool ok, string text) OtherTuple() 
    { 
     return (true, "asdf"); 
    } 
} 
+7

https://github.com/dotnet/roslyn/pull/16834 – PetSerAl

+2

https://github.com/dotnet/roslyn/issues/17135 – DavidG

답변

-3

나는 var가 그쪽을 정의 할 수 없다고 생각한다. 이 같은 더 명확 할 경우

var result3 = (true, tuple.ok ? tuple.text : "fdsa"); 

어쩌면이 라인에 튜플의 값을 설정하려고 T :

var result3 = Tuple.Create(true, tuple.ok ? tuple.text : "fdsa"); 

이 코드를 읽기 쉽게.