Skip to main content
 首页 » 编程设计

c#之使用正则表达式过滤 IObservablestring> 并返回匹配值

2024年01月26日27jyk

我有一个 IObservable<string>我想转换成 IObservable<int>通过正则表达式,我可以通过 ToProperty 分配给属性 helper 。

public class MyViewModel : ReactiveObject 
{ 
    public MyViewModel { 
       var o = Observable.Create( .... ); 
 
       o.Something(s => .... )   
        .ToProperty(this, x => x.Value, out _Value);     
    } 
 
    private ObservableAsPropertyHelper<int> _value; 
    public int Value { get { return _value.value; } } 
} 

第一个问题
Something(s => ...) 的最佳替代品是什么? ?
我想我可以使用 Select(s => s.TryMatchRegex('regex'))其中 TryMatchRegex返回 int?然后使用 Where(i => i.HasValue)然后是一个新的 Select(i => i.Value)但我不觉得那很聪明......

第二个问题
现在,假设我有几个正则表达式。每个发布的值都可以匹配零个或多个这些正则表达式。每个正则表达式都有其相应的属性。我需要多次订阅来源,还是有更好的方法?

请您参考如下方法:

我想你可能想多了。您所建议的一切听起来都很合理,并且首先会导致易于遵循的代码。您可以将正则表达式投影+过滤逻辑包装到具有有意义名称的自定义运算符中,以最大限度地提高可读性。

在优化之前检查性能是否存在问题。明显的优化(如果您需要)包括:

  • 如果您不需要了解连续的重复输入,应用DistinctUntilChanged().Publish().RefCount() o 并订阅你的正则表达式预测
  • Memoize正则表达式应用程序,具有适当的缓存策略
  • Compile the regexes