2016-03-26 19 views
0

Bu LINQ kullanarak kod, bunun Array içine saklanabilir Can not listesindeLINQ sorgu sonucunu bir dizide saklayabilir miyim?

string StringRegex = "\"(?:[^\"\\\\]|\\\\.)*\""; 

     Dictionary<string, string> dictionaryofString = new Dictionary<string, string>() 
     { 
      {"String", StringRegex} 
     }; 

var matches = dictionaryofString.SelectMany(a => Regex.Matches(input,a.Value) 
     .Cast<Match>() 
     .Select(b => 
       new 
       { 
        Index = b.Index, 
        Value = b.Value, 
        Token = a.Key 
       })) 
     .OrderBy(a => a.Index).ToList(); 
     for (int i = 0; i < matches.Count; i++) 
     { 
      if (i + 1 < matches.Count) 
      { 
       int firstEndPos = (matches[i].Index + matches[i].Value.Length); 
       if (firstEndPos > matches[(i + 1)].Index) 
       { 
        matches.RemoveAt(i + 1); 
        i--; 
       } 
      } 
     } 
foreach (var match in matches) 
     { 
      Console.WriteLine(match); 
     } 

içine değerlerini saklar mı? İstediğim sadece öğeyi görüntüleyebileceğim yer. Burada olduğu gibi çıktı da {Index =, Value =, Token =} Bu arada sadece "Value" "Token" indeksine ihtiyaç duyulmayan çıktıyı istiyorum.

cevap

1

Bunun yerine ToArray'u kullanabilirsiniz. Ancak, List, istediğiniz dizi işlevselliğini zaten verir, bir öğeye dizinine göre erişebilirsiniz.

var exampleQurey = select c from componentsDemo; 
var list = exampleQurey.ToList(); 
var secondElement = list[1]; // <- demo only, there could be an exception thrown, if there's less than two elements in the list 

DÜZENLEME: Ben yorumlar gördüğünüz gibi, buna ihtiyacın:

foreach (var match in matches) 
{ 
    Console.WriteLine(match.Value + ", " + match.Token); 
} 
+0

Bu benim ToList fonksiyonunu kullanıyorum ilk defa. Ve çıkışı kontrol edemez. Örneğin, akım çıkışı {Index = 0, Değer = "asd", Token = Dize "} Çıktının olmasını istiyorum:" asd "Token – Ali

+0

Cevabımı güncelledim –

+0

Marko, işe yaradı ama sadece değer alanını gösterir, simge alanıyla da birleştirilebilir mi? – Ali

0

şartının gibi kod geçerli kısmını değiştirmek gerekmez, sadece ToString geçersiz kılabilirsiniz Maç sınıfında Object base type yöntemi, bir şey gibi aşağıda gösterilen ve istenen sonucu üretecektir:

public class Match 
{ 
    public override string ToString() 
    { 
     return this.Value.ToString() + this.Token.ToString(); 
    } 
} 
+0

Mrinal, IF içinde koşullar bu satırı eklediğinde hata gösterir! – Ali

+0

Şimdi kontrol edin, bu değişiklik gerekmez yukarıdaki koda –

İlgili konular