C#7是否允许在linq表达式中解构元组

时间:2016-11-30 22:45:51

标签: c# linq tuples c#-7.0

我试图在Linq表达式中解构一个元组

// somewhere inside another method
var result = from word in words
             let (original, translation) = Convert(word)
             select original

这是返回元组的方法的签名

(string Original, string Translation) Convert(DictionaryWord word)
{
    // implementation
}

但它不是有效的语法。我只能在没有解构的情况下访问元组值:

var result = from word in words
             let result = GetWord(word, mode)
             select result.Original

是否有正确的解构方法或Linq表达式中不支持它?

3 个答案:

答案 0 :(得分:17)

似乎没有。

GitHub上有一个未解决的问题:https://github.com/dotnet/roslyn/issues/6877

修改

问题已移至dotnet/csharplang#355

答案 1 :(得分:5)

在C#7.0中不支持Linq查询中的解构。

只有三种形式的解构使其成为C#7.0(在分配中解构,在" foreach"循环和" for"循环)。 但是当语言设计委员会考虑所有声明变量的可能的地方(因此将成为解构的候选者)并优先考虑它们时,解构在" let" (可能"来自")条款紧随其后。

如果您觉得这样做有用,请务必在https://github.com/dotnet/csharplang/issues/189上留下备注或竖起大拇指。

答案 2 :(得分:2)

您可以执行以下操作:

public static (string Original, string Translation) Convert(string word)
{
    return ("Hello", "Hello translated");
}
static void Main(string[] args)
{
    List<string> words = new List<string>();
    words.Add("Hello");

    var result = from word in words
                    select Convert(word).Translation;

    Console.WriteLine("Hello, world!" + result.FirstOrDefault());
}