扩展方法与yield关键字
一、C#扩展方法
扩展方法是允许使用实例方法的调用语法来调用静态方法的语言功能。
扩展方法能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。
扩展方法的定义与调用:
定义包含扩展方法的静态类,此类必须对客户端代码可见。
将扩展方法实现为静态方法,并且使其可访问性与所在类的可访问性一致。
扩展方法的第一个参数是指定方法所操作的类型、此参数前面必须加上this修饰符。
在调用代码中,添加using指令,用于指定包含扩展方法类的命名空间。
扩展方法的调用与调用类型的实例方法一样。
使用示例:使用扩展方法为string类型扩展一个单词计数的方法:
public static class StringExtension { public static int WordCount(this string str) { // 将字符串按照给定的字符进行分割,并计算数量 return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Count(); } } static void Main(string[] args) { // 扩展一个用于单词计数的方法 string str = "\"Chinese Bridge\" language competition for Swedish students held in Stockholm, Sweden"; int count = str.WordCount(); Console.WriteLine("当前字符串的单词个数为{0}个。",count); }
二、yield关键字
yield关键字向编译器指示该关键字所在的方法是迭代器块,编译器将生成一个类来实现迭代器块中所表示的行为。
在迭代器块中,yield关键字与return关键字结合使用,向枚举器对象提供值,该值为返回值。
使用示例:使用foreach循环语句对List<T>集合进行遍历,将符合条件的商品信息返回。
public static IEnumerable<Goods> getList(List<Goods> list, double price){ foreach (var item in list) { if (item.GoodsPrice == price) { yield return item; } } } List<Goods> userInfoList = new List<Goods>() { new Goods() { GoodsName="薯条", GoodsPrice=4} //... }; var obj = getList(userInfoList, 4); foreach (var item in obj) { Console.WriteLine("商品名称:{0},商品价格{1}", item.GoodsName,item.GoodsPrice); }
需要购买本课才能留言哦~