在C#7中,它apparently无法仅使用一个项目解构为元组。
ValueTuple<T1>
存在,所以不是因为这个。
向后兼容性意味着Deconstruct
方法,其中一个参数也必须合法:
public void Deconstruct(out int i)
那么为什么你不能写:
var (num) = foo;
仅仅是因为没有合理的用例吗?
答案 0 :(得分:5)
我的猜测:考虑以下情况:
int num;
(num) = foo;
如果foo
定义了一个带有out int
的解构函数和一个隐式的int强制转换操作符,那么在这种情况下应该调用它是不明确的
在这种特定情况下可能会出现编译错误,同时允许我猜测的一般情况,但是,正如您所提到的那样,没有用例,语法会令人困惑,也许有意义不允许它在所有
答案 1 :(得分:1)
我正在使用Visual Studio 2017 RC。我发现了Connect();您列出的参考不正确。您列出的示例语法可以编译并运行。
作为测试,我使用了以下代码:
public class Foo
{
public int Bar { get; set; }
public void Deconstruct(out int bar)
{
bar = Bar;
}
}
var foo = new Foo { Bar = 3 };
var (num) = foo; //num is an int with a value of 3
var obj = foo; //obj is a Foo object with the same reference as foo
在上面的示例中,num
变量是int
,其值为3. obj
变量是Foo
对象,其引用与{{1}相同}}
以下内容无法编译:
foo