c#的default、using和yield使用小结
2009-06-20 18:44
316 查看
一、default的应用场合
1、switch...case
在switch语句中,如果没有任何case表达式与开关值匹配,则控制传递给跟在可选default标签后的语句。如果没有default标签,则控制传递到switch以外。
对于c#,为了便于维护,建议default项最好要写。
示例代码:
using System.Runtime.InteropServices;
namespace System.Collections
{
// 摘要:
// 公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。
[ComVisible(true)]
[Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
public interface IEnumerable
{
// 摘要:
// 返回一个循环访问集合的枚举数。
//
// 返回结果:
// 可用于循环访问集合的 System.Collections.IEnumerator 对象。
[DispId(-4)]
IEnumerator GetEnumerator();
}
}
(2)、说明
IEnumerator:提供在普通集合中遍历的接口,有Current,MoveNext(),Reset(),其中Current属性返回的是object类型,另外两个是实例方法;
IEnumerable: 暴露一个IEnumerator,支持在普通集合中的遍历;
IEnumerator<T>:继承自IEnumerator,有Current属性,返回的是T类型;
IEnumerable<T>:继承自IEnumerable,暴露一个IEnumerator<T>,支持在泛型集合中遍历。
(3)总结
a、通过分析(1)中的源码,你也可以从这两个接口的用词选择上,看出其不同:IEnumerable是一个声明式的接口,声明实现该接口的类是“可枚举(enumerable)”的,但并没有说明如何实现iterator;IEnumerator是一个实现式的接口,IEnumerator类就是一个iterator。
b、一个集合要支持foreach方式的遍历,必须实现IEnumerable接口(即必须以某种方式返回IEnumerator对象);
c、IEnumerator对象具体实现了iterator(通过内部的MoveNext(),Reset(),Current)。
d、IEnumerable和IEnumerator通过IEnumerable的GetEnumerator()方法建立了连接,客户端可以通过IEnumerable的GetEnumerator()得到IEnumerator对象,所以从实质上来讲,将GetEnumerator()看作IEnumerator对象的工厂方法也未尝不可。
1、switch...case
在switch语句中,如果没有任何case表达式与开关值匹配,则控制传递给跟在可选default标签后的语句。如果没有default标签,则控制传递到switch以外。
对于c#,为了便于维护,建议default项最好要写。
示例代码:
using System.Runtime.InteropServices;
namespace System.Collections
{
// 摘要:
// 公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。
[ComVisible(true)]
[Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
public interface IEnumerable
{
// 摘要:
// 返回一个循环访问集合的枚举数。
//
// 返回结果:
// 可用于循环访问集合的 System.Collections.IEnumerator 对象。
[DispId(-4)]
IEnumerator GetEnumerator();
}
}
(2)、说明
IEnumerator:提供在普通集合中遍历的接口,有Current,MoveNext(),Reset(),其中Current属性返回的是object类型,另外两个是实例方法;
IEnumerable: 暴露一个IEnumerator,支持在普通集合中的遍历;
IEnumerator<T>:继承自IEnumerator,有Current属性,返回的是T类型;
IEnumerable<T>:继承自IEnumerable,暴露一个IEnumerator<T>,支持在泛型集合中遍历。
(3)总结
a、通过分析(1)中的源码,你也可以从这两个接口的用词选择上,看出其不同:IEnumerable是一个声明式的接口,声明实现该接口的类是“可枚举(enumerable)”的,但并没有说明如何实现iterator;IEnumerator是一个实现式的接口,IEnumerator类就是一个iterator。
b、一个集合要支持foreach方式的遍历,必须实现IEnumerable接口(即必须以某种方式返回IEnumerator对象);
c、IEnumerator对象具体实现了iterator(通过内部的MoveNext(),Reset(),Current)。
d、IEnumerable和IEnumerator通过IEnumerable的GetEnumerator()方法建立了连接,客户端可以通过IEnumerable的GetEnumerator()得到IEnumerator对象,所以从实质上来讲,将GetEnumerator()看作IEnumerator对象的工厂方法也未尝不可。
相关文章推荐
- c#的default、using和yield使用小结
- C# using 三种使用方式
- 在C#里使用using操作符
- C#:using 的使用
- C#中using的使用方法
- C# 中使用using的三种方法
- C#中使用C++ struct位域的方法小结
- C#中ref和out的使用小结
- Unity3d C#脚本学习小结(七)[OnTriggerEnter的使用方法]
- c#中using的三种使用
- using关键字在C#中的使用方法
- C# 中的"yield"使用
- 在C#中直接使用Open API的方法 / A Method of Using Open API in C#
- C# ADO基础(使用using操作数据库)
- C#中using的使用方法
- C#Using使用场景
- C#中使用split分割字符串的几种方法小结
- C#中ref和out的使用小结
- C# using 三种使用方式