首先,两者
Max
和
Any
具有分别接受选择器和谓词的重载。这否定了
Select
接下来,我更改了
Observable.Merge
使用
Changed
的属性
ReactiveList
哪个是Rx版本
INotifyCollectionChanged
. 我还更改了
IEnumerable
属于
int
s代替;只是感觉更合适。
var keyElements = new ReactiveList<KeyElement>();
IObservable<IEnumerable<int>> rangeToMax = keyElements.Changed
.Select(_ => Enumerable.Range(2, keyElements.Max(keyElement => keyElement.KeyTrigger.Length));
IObservable<IObservable<string>> detectedKeyTrigger = rangeToMax.
.Select(range => range
.Select(length => _keyPressed.Buffer(length, 1).Select(chars => new string(chars.ToArray()))) // 1
.Merge() // 2
.Where(m => keyElements.Any(ke => ke.KeyTrigger == m)) // 3
.Switch(); // 4
-
IObservable<string>
发出最后一个
n
用户键入的字符。为每个可能长度的
联合体
-
IEnumerable<IObservable<string>>
合为一体
Observable<string>
-
KeyTrigger
s到
-
像
rangeToMax.Select
IObservable<IObservable<string>>
我们使用
Switch
IObservable<字符串(>);
这个
IObservable<IObservable<字符串(>)&燃气轮机;
生产。