2016-03-26 4 views
0

Это код с помощью LINQ, он хранит значения в спискеМогу ли я сохранить результат запроса LINQ в массиве?

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

Может не быть сохранены в массиве? Где я могу отобразить только элемент, который я хочу. Точно так же, как здесь, вывод: {Index =, Value =, Token =} Между тем я хочу, чтобы результат, который имел только индекс «Знак», «Токен» не нужен.

ответ

1

Вместо этого вы можете использовать ToArray. Но List дает вам необходимую функциональность массива, вы можете получить доступ к элементу по его индексу.

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: как я могу видеть из ваших комментариев, вам это нужно:

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

Это первый раз, когда я с помощью функции ToList. И не может управлять выходом. Например, текущий вывод равен {Index = 0, Value = "asd", Token = String "} Я хочу, чтобы результат был:« asd »Token – Ali

+0

Я обновил свой ответ. –

+0

Marko, он работал, но он только показывает поле значений, может ли оно быть объединено с полем токенов тоже? – Ali

0

По вашему требованию вам не нужно изменить текущую часть кода, вы можете просто переопределить ToString метод Object base type в классе матча, что-то, как показано ниже, и это даст желаемый результат:

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

Mrinal, Index в условиях IF показывают ошибку, когда я добавил эту строку! – Ali

+0

Проверить сейчас, это не требует изменений к приведенному выше коду –

Смежные вопросы