Flo*_*eck 8 c# tuples ternary-operator c#-7.0
我在C#中遇到了新的Tuple功能错误.如果我使用三元运算符来确定元组的值,我必须用括号括起来.我没想到这一点,因为在方法调用中情况并非如此.
这有什么理由还是个bug?
建立:
我的代码:
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)
这使得代码易于阅读。