我有一个 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
