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

j8ag8udp  于 2022-12-15  发布在  C#
关注(0)|答案(3)|浏览(142)

我正在尝试解构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 = Convert(word)
             select result.Original

是否有适当的方法来解构它,或者它在Linq表达式中不受支持?

p5cysglq

p5cysglq1#

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

编辑

问题移至dotnet/csharplang#355

hfyxw5xn

hfyxw5xn2#

C# 7.0不支持Linq查询中的解构。
只有三种形式的解构进入了C#7.0(赋值中的解构、“foreach”循环中的解构和“for”循环中的解构),但是当语言设计委员会考虑了所有声明变量的可能位置(因此可能是解构的候选位置)并对它们进行优先排序时,“let”(可能还有“from”)子句中的解构排在了第二位。
如果您觉得https://github.com/dotnet/csharplang/issues/189有用,请务必在https://github.com/dotnet/csharplang/issues/189上留言或竖起大拇指。

h7wcgrx3

h7wcgrx33#

你可以这样做:

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());
}

相关问题