2016-11-30 17 views
15

Bir Linq ifadesi İştemu C# 7

// somewhere inside another method 
var result = from word in words 
      let (original, translation) = Convert(word) 
      select original 

içinde bir tuple yapısızlaştırmak çalışıyorum bir demet dönen yöntemin bir imzadır linq ifadelerde dizilerini yapısızlaştırmak izin

(string Original, string Translation) Convert(DictionaryWord word) 
{ 
    // implementation 
} 

Ama geçerli bir sözdizimi değil. Sadece yapıbozumu olmadan tanımlama grubu değerlerine erişebilir:

var result = from word in words 
      let result = GetWord(word, mode) 
      select result.Original 

bunu yapısızlaştırmak uygun bir yolu var mı yoksa Linq ifadeleri içeride desteklenmeyenler?

+0

LINQ entegrasyonu ne yazık ki C# 7 ile çok iyi düşünülmüş değildi. –

cevap

11

Öyle görünmüyor. https://github.com/dotnet/roslyn/issues/6877

Düzen C# 7.0 desteklenmez

Sayı Linq sorguları dotnet/csharplang#355

+1

Gerçekten, [mevcut Roslyn ana derleme etmez] (http://tryroslyn.azurewebsites.net/#b:master/f:r/K4Zwlgdg5gBAygTxAFwKYFsB0AZSBHAbgCgiBjAGwEMQQYARMU5MAewkoCcEB1FjgEyIBvIjDEwAbizD8YAWQAUDJq3ZdeAgNoBdGAHc+/EAEpR4keMuTOMDqhDByyGAF4YAMw4t0+wzEi+AiBmVqHkqM4KfGBQkJTkADQwyByUECBUzGzGrjAAwmwSqBzICgYCpqFVIKjhTDDRsezkxJYAviEwnQooHJCwAPJ9TfFJvf0wACqp6ZmqOQUQRSVKjFlqPH7l/JXiAJAuAHww/KjulI6lPSn9YzfQxsbEbUA==). – svick

+0

Teşekkürler. Hala bir bekleyişte olduğu üzücü – Random

2

Dekonstrüksiyon taşındı:

GitHub'dan bu için açık bir konu var.

Yalnızca üç yapı-çözme biçimi, C# 7.0 (atama işleminde, "foreach" döngüsünde ve "for" döngüsünde). Ancak dil tasarım komitesi, değişkenleri bildiren (ve dolayısıyla yapısöküm için adaylar olacak) ve onları önceliklendiren tüm muhtemel yerleri dikkate aldığında, "izin" (ve muhtemelen "olan") cümleciklerinde yapısökümün bir sonraki sırada olduğu görülmüştür.

Yararlı olduğunuzu düşünüyorsanız lütfen bir notu veya bir notu https://github.com/dotnet/csharplang/issues/189 numaralı sayfada bıraktığınızdan emin olun.