2016-03-26 3 views
0

Dies ist der Code LINQ verwendet, ist es die Werte in der Liste speichertKann ich das LINQ-Abfrageergebnis in einem Array speichern?

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); 
     } 

Kann es nicht in Array gespeichert werden? Wo ich nur Artikel anzeigen kann, die ich möchte. Genau wie hier ist die Ausgabe {Index =, Wert =, Token =} In der Zwischenzeit möchte ich die Ausgabe, die gerade von "Value" "Token" Index wird nicht benötigt.

Antwort

1

Sie können stattdessen ToArray verwenden. Aber List gibt Ihnen bereits die gewünschte Array-Funktionalität, Sie können auf ein Objekt über seinen Index zugreifen.

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 

EDIT: wie ich aus Ihre Kommentare sehen können, müssen Sie dies:

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

Dies ist das erste Mal, dass ich bin mit ToList Funktion. Und kann die Ausgabe nicht steuern. zum Beispiel, aktuelle Ausgabe ist {Index = 0, Wert = "asd", Token = String "} Ich möchte die Ausgabe zu sein:" asd "Token – Ali

+0

Ich habe meine Antwort aktualisiert. –

+0

Marko, es hat funktioniert aber es zeigt nur das Wertfeld, kann es auch mit Token-Feld verkettet werden? – Ali

0

Wie pro Ihre Anforderung Sie nicht den aktuellen Teil des Codes ändern müssen, können Sie einfach überschreiben die ToString Verfahren von Object base type im Match-Klasse, so etwas wie unten dargestellt, und es wird das gewünschte Ergebnis:

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

Mrinal, Index in IF-Bedingungen zeigen einen Fehler beim Hinzufügen dieser Zeile – Ali

+0

Überprüfen Sie jetzt, das muss nicht geändert werden zum obigen Code –

Verwandte Themen