摘要: 1. Converter<TInput, TOutput> :同时使用协变性和逆变性 代码清单13-15展示了委托类型 Converter<object, string> (一个接收对象,生成字符串的委托)的可变性转换。我们首先使用简单的Lambda表达式(调用 ToString )实现了委托。我们 阅读全文
posted @ 2018-12-12 22:07 一只桔子2233 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 我们的方形工厂总是生产位置相同且边长都为10的正方形。协变性允许我们将方形工厂视为更一般的形状工厂 ,这没有什么奇怪的。然后我们创建了一个通用的行为,打印任意形状的面积。这次我们使用逆变转换,让行为可用于任意方形 。最后,我们将方形工厂的结果提供给方形行为(action),将形状工厂的结果提供给形状 阅读全文
posted @ 2018-12-11 22:39 一只桔子2233 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 1. 用 in 和 out 表示可变性 我们使用的两个接口是 IEnumerable<T> (对于 T 是协变的)和 IComparer<T> (对于 T 是逆变的),它们可以很好地展示可变性。以下是它们在.NET 4中的声明: 这非常好记:如果类型参数只用于输出,就使用 out ;如果只用于输入, 阅读全文
posted @ 2018-12-11 22:18 一只桔子2233 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 1. 协变性:从API返回的值 协变性用于向调用者返回某项操作的值。例如一个简单的表示工厂模式的泛型接口,它只包含一个方法 CreateInstanse ,返回适当类型的实例。代码如下 现在, T 在接口中只出现了一次(除了在签名中),它仅作为返回值使用,即方法的输出。这意味着可以将特定类型的工厂视 阅读全文
posted @ 2018-12-10 22:15 一只桔子2233 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 1 阅读全文
posted @ 2018-12-10 21:10 一只桔子2233 阅读(73) 评论(0) 推荐(0) 编辑
摘要: 12.1.1 数据库和模型 阅读全文
posted @ 2018-12-09 14:24 一只桔子2233 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 11.7.1 需要使用点标记的操作 最明显的必须使用点标记的情形是调用 Reverse 、 ToDictionary 这类没有相应的查询表达式语法的方法。然而即使查询表达式支持你要使用的查询操作符,也很有可能无法使用你想使用的特定重载。例如, Enumerable.Where 包含一个重载,将父序列 阅读全文
posted @ 2018-12-08 22:23 一只桔子2233 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 11.5.1 使用 join 子句的内连接 如果你打算把一个巨大的序列连接到一个极小的序列上,应尽可能把小序列作为右边序列 我们通常需要对序列进行过滤,而在连接前进行过滤比在连接后过滤效率要高得多。在这个阶段,假如只有左边的序列需要进行过滤,查询表达式相对简单一些。例如,如果我们只想显示已经关闭的缺 阅读全文
posted @ 2018-12-06 22:26 一只桔子2233 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 11.6.1 使用 group...by 子句进行分组 11.6.2 查询延续 join ... into 不是延续 你很容易掉进这样的陷阱,即看到了上下文关键字 into ,就认为这是查询延续。对于连接来说,这是不对的。用于分组连接的 join ... into 子句不能形成一个延续的结构。主要的 阅读全文
posted @ 2018-12-06 22:17 一只桔子2233 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 11.2.4 Cast 、 OfType 和显式类型的范围变量 这两个操作符很相似:都可以处理任意非类型化的序列(它们是非泛型 IEnumerable 类的扩展方法),并返回强类型的序列。 Cast 通过把每个元素都转换为目标类型(遇到不是正确类型的任何元素的时候,就会出错)来处理,而 OfType 阅读全文
posted @ 2018-12-04 21:16 一只桔子2233 阅读(137) 评论(0) 推荐(0) 编辑