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 に移動しました
Linqクエリでの分解は、C#7.0ではサポートされていません。
3つの形式の分解のみがC#7.0になりました(割り当て、「foreach」ループ、および「for」ループでの分解)。しかし、言語設計委員会が変数を宣言する可能性のあるすべての場所を検討し(したがって、脱構築の候補となる)、それらに優先順位を付けたとき、「let」(および場合によっては「from」)句の脱構築が次に並んでいました。
これが役立つと思われる場合は、必ずメモまたは親指を立てて https://github.com/dotnet/csharplang/issues/189 に残してください。