如何从 IChangeSet 中提取单个项目?
How to extract single item from IChangeSet?
我经常需要过滤我的可观察连接并以类似于 FirstOrDefault
在 IEnumerable
上执行的方式从中获取单个项目。这对 SelectedItem
属性 超级有用。如何在反应中做到这一点 UI?
示例代码:
IObservabel<T> = _mySourceList
.Connect()
.Top(1)
.?()
有函数 Maximum
和 Minimum
,但它们只适用于具体类型。
如果您的目标是在发生更改时获取源列表的第一项(或默认项),则它将是:
IObservabel<T> = _mySourceList
.Connect()
.Select(_ => _mySourceList.Items.FirstOrDefault());
您可以使用 ToCollection()
将 IObservable<IChangeSet>
转换为 IObservable<IReadOnlyCollection>
。从那里它是一个简单的 First()
调用(或任何你需要的)来获取列表的第一个元素。请参阅以下示例:
SourceList<int> list = new SourceList<int>();
IObservable<int?> observeFirst = list.Connect()
.ToCollection()
.Select(it => it.Any()
? (int?)it.First()
: null);
IDisposable disposable = observeFirst.Subscribe(it => {
Console.WriteLine("The 'first' element is: "+it);
});
Console.WriteLine("Start");
list.Add(4);
list.Add(9);
list.RemoveAt(0);
list.Insert(0, 12);
list.Insert(1, 20);
list.Insert(0, 50);
list.RemoveAt(0);
list.Clear();
disposable.Dispose();
Console.WriteLine("End");
这将生成以下输出:
Start
The 'first' element is: 4
The 'first' element is: 4
The 'first' element is: 9
The 'first' element is: 12
The 'first' element is: 12
The 'first' element is: 50
The 'first' element is: 12
The 'first' element is:
End
我经常需要过滤我的可观察连接并以类似于 FirstOrDefault
在 IEnumerable
上执行的方式从中获取单个项目。这对 SelectedItem
属性 超级有用。如何在反应中做到这一点 UI?
示例代码:
IObservabel<T> = _mySourceList
.Connect()
.Top(1)
.?()
有函数 Maximum
和 Minimum
,但它们只适用于具体类型。
如果您的目标是在发生更改时获取源列表的第一项(或默认项),则它将是:
IObservabel<T> = _mySourceList
.Connect()
.Select(_ => _mySourceList.Items.FirstOrDefault());
您可以使用 ToCollection()
将 IObservable<IChangeSet>
转换为 IObservable<IReadOnlyCollection>
。从那里它是一个简单的 First()
调用(或任何你需要的)来获取列表的第一个元素。请参阅以下示例:
SourceList<int> list = new SourceList<int>();
IObservable<int?> observeFirst = list.Connect()
.ToCollection()
.Select(it => it.Any()
? (int?)it.First()
: null);
IDisposable disposable = observeFirst.Subscribe(it => {
Console.WriteLine("The 'first' element is: "+it);
});
Console.WriteLine("Start");
list.Add(4);
list.Add(9);
list.RemoveAt(0);
list.Insert(0, 12);
list.Insert(1, 20);
list.Insert(0, 50);
list.RemoveAt(0);
list.Clear();
disposable.Dispose();
Console.WriteLine("End");
这将生成以下输出:
Start
The 'first' element is: 4
The 'first' element is: 4
The 'first' element is: 9
The 'first' element is: 12
The 'first' element is: 12
The 'first' element is: 50
The 'first' element is: 12
The 'first' element is:
End