为IObservable实现自己的运算符(详解)
您可以通过为LINQ库不提供的操作添加新运算符,或者通过创建自己的标准查询运算符实现来提高可读性和性能,从而扩展Rx。 编写自定义版本的标准LINQ操作符在您希望使用内存中对象操作时以及当预期自定义不需要查询的全面视图时非常有用。
创建新操作符
LINQ提供了一整套操作符,涵盖了一组实体上的大多数可能的操作。 但是,您可能需要一个运算符为查询添加特定的语义,尤其是如果您可以在代码中多次重复使用该运算符。
许多现有的LINQ运算符实际上是使用其他基本LINQ运算符构建的。 例如,SelectMany运算符是通过组合Select和Merge运算符构建的,如下面的代码所示。
public static IObservable<TResult> SelectMany<TSource, TResult>( this IObservable<TSource> source, Func<TSource, IObservable<TResult>> selector) { return source.Select(selector).Merge(); } In t
通过在构建新的LINQ运算符时重用现有的LINQ运算符,您可以利用Rx库中实现的现有性能或异常处理功能。
当编写自定义运算符时,最好不要留下任何未使用的一次性用品; 否则,您可能会发现资源实际上可能泄漏,取消可能无法正常工作。
定制现有运算符
向LINQ中添加新的运算符是扩展其功能的一种方法。 但是,您还可以通过将现有运算符包含到更专门和更有意义的运算符中来提高代码可读性。
以上这篇为IObservable实现自己的运算符(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
为IObservable实现自己的运算符(详解)
您可以通过为LINQ库不提供的操作添加新运算符,或者通过创建自己的标准查询运算符实现来提高可读性和性能,从而扩展Rx. 编写自定义版本的标准LINQ操作符在您希望使用内存中对象操作时以及当预期自定义不需要查询的全面视图时非常有用. 创建新操作符 LINQ提供了一整套操作符,涵盖了一组实体上的大多数可能的操作. 但是,您可能需要一个运算符为查询添加特定的语义,尤其是如果您可以在代码中多次重复使用该运算符. 许多现有的LINQ运算符实际上是使用其他基本LINQ运算符构建的. 例如,SelectMan
-
基于C++ bitset常用函数及运算符(详解)
C++ bitset--高端压位卡常题必备STL ------------------------------------------------------------ 以下内容翻译自cplusplus.com,极大地锻炼了我的英语能力. bitset存储二进制数位. bitset就像一个bool类型的数组一样,但是有空间优化--bitset中的一个元素一般只占1 bit,相当于一个char元素所占空间的八分之一. bitset中的每个元素都能单独被访问,例如对于一个叫做foo的bitset,
-
JavaScript知识点总结(四)之逻辑OR运算符详解
在JavaScript中,逻辑OR运算符用||表示 var bTrue = true; var bFalse = false; var bResult = bTrue || bFalse; 下面的真值表描述了逻辑AND运算符的行为: 在JavaScript中,0,"",false,null,undefined,NaN均表示false, 可以用如下的代码证明: <script type="text/javascript"> var bFalse = fal
-
PHP读书笔记_运算符详解
什么是运算符 什么是运算符?运算符是告诉PHP做相关运算的标识符号.例如,你需要计算123乘以456等于多少,这时候就需要一个符号,告诉服务器,你需要做乘法运算. PHP中的运算符有哪些?PHP运算符一般分为算术运算符.赋值运算符.比较运算符.三元运算符.逻辑运算符.字符串连接运算符.错误控制运算符. PHP中的算术运算符 算术运算符主要是用于进行算术运算的,例如:加法运算.减法运算.乘法运算.除法运算.在PHP中的常用的算术运算符对应下表: PHP中的赋值运算符 PHP的赋值运算符有两种,分别
-
C++位运算符详解(异或运算符和移位运算符)
什么是位运算 位运算符按二进制进行运算,这些运算符只能用于整数类型的操作.如:char,short,int,long 通过位运算符来获取高位值和低位值 int a=0x1234; int high,low; high = (a>>8) &0x00ff; low = a & 0x00ff; 左移运算符和右移运算符(<<和>>) 左移是将一个二进制数,移动若干位,右边空出的位置用0来填补,高位左移溢出应该舍弃该高位. 如:inta = 8, a = 0000
-
对Python3 * 和 ** 运算符详解
在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法. 1. 算数运算 * 代表乘法 ** 代表乘方 >>> 2 * 5 10 >>> 2 ** 5 32 2. 函数形参 *args 和 **kwargs 主要用于函数定义. 你可以将不定数量的参数传递给一个函数.不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字.其实并不是必须写成 *args 和 **kwargs. *(星号) 才是必须的. 你也可以写
-
HashMap源码中的位运算符&详解
引言 最近在读HashMap源码的时候,发现在很多运算符替代常规运算符的现象.比如说用hash & (table.length-1) 来替代取模运算hash&(table.length):用if((e.hash & oldCap) == 0)判断扩容后元素的位置等等. 1.取模运算符%底层原理 总所周知,位运算&直接对二进制进行运算:而对于取模运算符%:a % b 相当于 a - a / b * b,底层实际上是除法器,究其根源也是由底层的减法和加法共同完成.所以其运行效
-
Python3中的算术运算符详解
目录 一·算术运算符 二·代码演示 1·求和 + 2·取差 - 3·相乘 * 4·相除 / 5·取余 % 6·幂运算 ** 7·整除 // 8·优先级混合运算 三·'+'与'*'在序列中的使用 1·拼接合并 + 2·复制 * 一·算术运算符 在python中,算术运算符与数学中的算术运算极为类似,只是有些运算符号有所差别.算术运算符的算术计算一般是运用于int类型与floa类型,同时+与*还可以运用到各种序列的拼接合并与复制中. 优先级:有括号先算括号内的,再乘方>乘除>整除>取余>
-
ES6中的rest参数与扩展运算符详解
前言 本文主要给大家介绍了关于ES6中rest参数与扩展运算符的相关内容,rest参数和扩展运算符都是ES6新增的特性.rest参数的形式为:...变量名:扩展运算符是三个点(...).下面话不多说了,来一起看看详细的介绍: rest参数 rest参数用于获取函数的多余参数,这样就不需要使用arguments对象了.rest参数搭配的变量是一个数组,该变量将多余的参数放入数组中. function add(...values) { let sum = 0; for (var val of val
-
Swift教程之基本运算符详解
运算符是一种特定的符号或表达式,用来检验.修改或合并变量.例如,用求和运算符+可以对两个数字进行求和(如let i = 1 + 2):稍微复杂一点的例子有逻辑与操作符&& (如if enteredDoorCode && passedRetinaScan) ,自增长运算符 ++i (这是i=i+1的简写方式) Swift支持C标准库中的大多数运算符并提升了各自的兼容性,从而可以排除常见的编码错误.赋值操作符 (=)不会返回一个值,这样可以防止你因粗心将赋值运算符 (=)写成
随机推荐
- jQuery实现的Div窗口震动效果实例
- jQueryUI Sortable 应用Demo(分享)
- js模拟权限选择实现代码(select操作)
- 我想建立一个ftp用户,直接指向整个freehost目录
- java中常用的排序方法
- thinkphp多层MVC用法分析
- php循环检测目录是否存在并创建(循环创建目录)
- Python字符串转换成浮点数函数分享
- setInterval和setTimeout停止的方法
- Android中用StaticLayout实现文本绘制自动换行详解
- javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
- 详解Node.js access_token的获取、存储及更新
- 用VBScript实现对Windows注册表的修改详解
- MySQL数据库的23个注意事项
- Jquery chosen动态设置值实例介绍
- js实现带简单弹性运动的导航条
- JScript的条件编译
- Android 监听锁屏、解锁、开屏 功能代码
- bootstrap table配置参数例子
- C#基础入门之算法:交换