【问题标题】:Why can use Regex class like a Data source when declare为什么声明时可以像数据源一样使用Regex类
【发布时间】:2016-07-08 14:28:03
【问题描述】:

如上图所示,我可以在声明 Regex 类时像使用数据源一样使用它。这是为什么呢?

而且我还注意到这条 LinQ 线是以点开头的。这怎么可能?

【问题讨论】:

  • 你想问为什么我们可以使用Regex类的静态方法,为什么使用点来访问Regex类的方法/属性?
  • 是的,在 MDSN 上:var wordQuery = from word in words。但我的情况是“正则表达式”类。

标签: regex linq


【解决方案1】:

Regex.Matches(string, string) 返回一个实现ICollectionIEnumerableMatchCollection 实例。所以你不能直接使用 LINQ,因为System.Linq.Enumerable 中的 LINQ 扩展方法需要IEnumerable<T>(通用版本,differences)。

这就是使用Enumerable.OfType 的原因。这将返回IEnumerable<Match>,所以现在您可以使用 LINQ。除了OfType<Match>,他还可以使用Cast<Match>

一般而言,您可以将Linq-To-Objects 与实现IEnumerable<T> 的任何类型一起使用,即使是String,因为它实现了IEnumerable<char>。一个创建字符字典及其出现的小例子:

Dictionary<char, int> charCounts = "Sample Text" // bad example because only unique letters but i hope you got it
  .GroupBy(c => c)
  .ToDictionary(g => g.Key, g => g.Count());

回答问题的 .dot 部分。 LINQ 基本上由许多扩展方法组成,因此您也可以像其他任何方法一样调用它们,您可以使用一行:

Dictionary<char, int> charCounts = "Sample Text".GroupBy(c => c).ToDictionary(g => g.Key, g => g.Count());

【讨论】:

    猜你喜欢
    • 2014-05-07
    • 2020-05-16
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多