2017-03-19 3 views
8

新しいタプル機能でC#でエラーが発生しました。タプルの値を決定するために三項演算子を使用する場合は、それを括弧で囲む必要があります。私はこれを期待していませんでした。なぜなら、メソッド呼び出しではそうではないからです。C#でタプルを作成するときに三角演算子を囲む括弧のないコンパイルエラー

これには何らかの理由がありますか、それともバグですか?

セットアップ:

  • のVisual Studio 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がthaを定義できないと思いますあなたはこのような、より明確にする場合は、

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

たぶん、このライン上のタプルの値を設定しようとしているT:

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

これは読みコードが容易になります。

関連する問題