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

33

我正在尝试在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表达式中不支持它?


遗憾的是,C# 7 中的 LINQ 集成并没有考虑得很周全。 - Cory Nelson
3个回答

28

2
谢谢。很遗憾它仍然在待办事项列表中。 - Random
4
2022年,我们不能使用from (x, y) in points或者let (x, y) = point - Bolpat

9

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

C# 7.0仅支持三种形式的解构,即解构赋值、在“foreach”循环中的解构以及在“for”循环中的解构。但是当语言设计委员会考虑到所有可能声明变量的位置(因此可能成为解构的候选位置)并确定优先级时,“let”(和可能是“from”)子句中的解构就排在了下一位。

如果您认为这将有用,请务必在https://github.com/dotnet/csharplang/issues/189上留下备注或点个赞。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接