在 C# 中创建元组时编译错误,没有括号包围三元运算符
Posted
技术标签:
【中文标题】在 C# 中创建元组时编译错误,没有括号包围三元运算符【英文标题】:Compile error without brackets surrounding ternary operator when creating Tuples in C# 【发布时间】:2017-08-10 22:01:20 【问题描述】:我在使用新元组功能的 C# 中遇到错误。如果我使用三元运算符来确定元组的值,我必须用括号括起来。我没想到会这样,因为在方法调用中并非如此。
这是有什么原因吗?还是一个错误?
设置:
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");
【问题讨论】:
github.com/dotnet/roslyn/pull/16834 还有github.com/dotnet/roslyn/issues/17135 【参考方案1】:我认为 var 无法定义您正在尝试在此行上设置元组的值
var result3 = (true, tuple.ok ? tuple.text : "fdsa");
也许如果你像这样更清楚:
var result3 = Tuple.Create(true, tuple.ok ? tuple.text : "fdsa");
这使代码易于阅读。
【讨论】:
以上是关于在 C# 中创建元组时编译错误,没有括号包围三元运算符的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript - 为啥包含括号会导致三元表达式错误?