Ответ 1
Кажется, что нет.
В GitHub есть открытая проблема: https://github.com/dotnet/roslyn/issues/6877
Edit
Проблема переместилась на dotnet/csharplang # 355
Я пытаюсь деконструировать кортеж внутри выражения 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
Edit
Проблема переместилась на dotnet/csharplang # 355
Декомпозиция в запросах Linq не поддерживается в С# 7.0.
Только три формы деконструкции превратили его в С# 7.0 (деконструкция в задании, в петле "foreach" и в цикле "для" ). Но когда комитет по разработке языка рассмотрел все возможные места, которые объявили переменные (и, следовательно, были бы кандидатами на деконструкцию), и установил их приоритет, деконструкция в предложениях "пусть" (и, возможно, "от" ) была следующей в очереди.
Пожалуйста, не забудьте оставить примечание или превью на https://github.com/dotnet/csharplang/issues/189, если вы считаете, что это будет полезно.