在C#中创建元组时编译包含三元运算符括号的错误

Flo*_*eck 8 c# tuples ternary-operator c#-7.0

我在C#中遇到了新的Tuple功能错误.如果我使用三元运算符来确定元组的值,我必须用括号括起来.我没想到这一点,因为在方法调用中情况并非如此.

这有什么理由还是个bug?

建立:

  • Visual Studio 2017
  • .Net Standard 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 -3

我认为 var 无法定义您正在尝试在这一行设置元组的值

 var result3 = (true, tuple.ok ? tuple.text : "fdsa");  
Run Code Online (Sandbox Code Playgroud)

也许如果你这样说得更清楚:

 var result3 = Tuple.Create(true, tuple.ok ? tuple.text : "fdsa");  
Run Code Online (Sandbox Code Playgroud)

这使得代码易于阅读。