提问人:Random 提问时间:12/1/2016 最后编辑:Patrick McDonaldRandom 更新时间:9/9/2022 访问量:7772
C# 7 是否允许在 linq 表达式中解构元组
Does C# 7 allow to deconstruct tuples in linq expressions
问:
我正在尝试解构 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 表达式中是否不支持它?
答:
28赞
Patrick McDonald
12/1/2016
#1
似乎不是。
GitHub 上有一个悬而未决的问题:https://github.com/dotnet/roslyn/issues/6877
编辑
问题已移至 dotnet/csharplang#355
评论
1赞
svick
12/1/2016
事实上,它不能与当前的 Roslyn 母版一起编译。
2赞
Random
12/1/2016
谢谢。可悲的是,它仍然处于积压状态
4赞
Bolpat
4/30/2022
在 2022 年,我们不能使用 or .from (x, y) in points
let (x, y) = point
9赞
Julien Couvreur
3/12/2017
#2
C# 7.0 不支持 Linq 查询中的解构。
C# 7.0 中只有三种形式的解构(赋值解构、“foreach”循环和“for”循环解构)。 但是,当语言设计委员会考虑了所有可能声明变量的地方(因此将成为解构的候选者)并确定它们的优先级时,“let”(可能还有“from”)子句中的解构是紧随其后的。
如果您觉得这有用,请务必在 https://github.com/dotnet/csharplang/issues/189 上留下便条或竖起大拇指。
2赞
Nuno Dias
9/30/2020
#3
你可以做这样的事情:
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());
}
上一个:计算给定日期范围内的星期一数
下一个:jQuery 映射中的箭头函数
评论