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 = GetWord(word, mode)
select result.Original
是否有适当的方法来解构它或者它在 Linq 表达式中不受支持?
好像不是。
GitHub 上有一个未解决的问题:https://github.com/dotnet/roslyn/issues/6877
编辑
问题已移至 dotnet/csharplang#355
C# 7.0 不支持 Linq 查询中的解构。
只有三种解构形式进入了 C# 7.0(赋值解构、"foreach" 循环和 "for" 循环)。
但是当语言设计委员会考虑了声明变量的所有可能位置(因此将成为解构的候选者)并确定它们的优先级时,"let"(可能还有 "from")子句中的解构是下一个。
如果您觉得这有用,请务必在 https://github.com/dotnet/csharplang/issues/189 上留言或点赞。
你可以这样做:
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());
}
我正在尝试解构 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 表达式中不受支持?
好像不是。
GitHub 上有一个未解决的问题:https://github.com/dotnet/roslyn/issues/6877
编辑
问题已移至 dotnet/csharplang#355
C# 7.0 不支持 Linq 查询中的解构。
只有三种解构形式进入了 C# 7.0(赋值解构、"foreach" 循环和 "for" 循环)。 但是当语言设计委员会考虑了声明变量的所有可能位置(因此将成为解构的候选者)并确定它们的优先级时,"let"(可能还有 "from")子句中的解构是下一个。
如果您觉得这有用,请务必在 https://github.com/dotnet/csharplang/issues/189 上留言或点赞。
你可以这样做:
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());
}