Ste*_*Pet 7 .net c# system.reactive
请任何人告诉我SelectManyRx中的操作员如何工作.我也不知道Linq中有关此运算符的更多信息.
请在一个简单示例的帮助下解释这一点,以及在什么情况下我们将在Rx中使用此运算符.
Ast*_*sti 18
SelectMany将投影和展平结合到一个步骤中.假设您有许多列表,{ {1, 2}, {3, 4, 5}, { 6, 7 } }您可以使用它们SelectMany将其展平为单个列表,如:{ 1, 2, 3, 4, 5, 6, 7}
SelectMany 在Rx中可以将多个序列展平为一个可观察的(实际上有几个重载).
对于一个实际的例子,假设你有一个函数DownloadFile(filename),它给你一个Observable,它在文件完成下载时产生一个值.你现在可以写:
string[] files = { "http://.../1", "http://.../2", "http://.../3" };
files.ToObservable()
.SelectMany(file => DownloadFile(file))
.Take(3)
.Subscribe(c => Console.WriteLine("Got " + c) , ()=> Console.WriteLine("Completed!"));
Run Code Online (Sandbox Code Playgroud)
所有3个可观察对象DownloadFile都被展平为一个,因此您可以等待3个值到达以查看所有下载都已完成.
Ana*_*tts 18
SelectMany只是:
source.Select(selector).Merge();
Run Code Online (Sandbox Code Playgroud)
换句话说,它选择源输入到Observables流中,然后将每个Observable展平为结果流.
yam*_*men 10
我发现这个简短的视频有助于理解SelectMany for Rx(以及作为大理图的更高级用法):http://channel9.msdn.com/Blogs/J.Van.Gogh/Reactive-Extensions-API-in-depth -SelectMany