Почему в Regex.Match нет функции GetEnumerator? - PullRequest
1 голос
/ 18 ноября 2009

Regex.Match имеет .Success и .NextMatch, почему у него нет функции GetEnumerator?

С моей логикой это кажется достаточно простым для реализации. Но это не в 3.5, так что кто-нибудь может сказать мне, почему нет?

foreach (var m in Regex.Match("dummy text", "mm")) error CS1579: foreach statement cannot operate on variables of type 'System.Text.RegularExpressions.Match' because 'System.Text.RegularExpressions.Match' does not contain a public definition for 'GetEnumerator'

Ответы [ 3 ]

10 голосов
/ 18 ноября 2009

Возможно, вы хотите Regex.Matches?

3 голосов
/ 18 ноября 2009
Regex.Match 

возвращает первый экземпляр шаблона, который соответствует в строке.

Вы, вероятно, хотите

Regex.Matches

, который возвращает MatchCollection всех совпадений в строке.

Статья MSDN на Regex.Match

2 голосов
/ 18 ноября 2009

Поскольку объект Match является неизменным (и NextMatch() не изменяет контекст текущего соответствия, но дает ссылку на следующий, который отличается от IEnumerable.MoveNext()).

Но вы можете сделать это:

for (Match m=Regex.Match("dummy text", "mm"); m.Success; m=m.NextMatch()) {
    // loop code
}
...