.net 3.0+关于实现IEnumerable的类型的扩展方法的使用一
来源:互联网 发布:网络交换机辐射大不大 编辑:程序博客网 时间:2024/06/05 15:59
环境:.net framework 3.0以上 作者:lihui_830501
学习使用扩展方法之前,先学习一下Lambda表达式.Lambda表达式写成一个后面紧跟 => 标记的参数列表,=>之后是一个表达式或表语句块。Lambda表达式的参数可以是显型和隐型的。在显型参数列表中,每个参数的类型是显式指定的。在隐型参数列表中,参数的类型由lambda表达式出现的语境推导--特定地,当lambda表达式被转型到一个兼容的delegate类型时,delegate类型提供参数的类型.在有单一的隐型参数的lambda表达式中,圆括号可以从参数列表中省略。
以下是几种语法实现:
单一参数例子:
定义委托
在程序里使用
i的值为5.
二参数例子:
定义委托
在程序里使用
i的值为8.
下面再简单介绍一下扩展方法.扩展方法是可以通过使用实例方法语法调用的静态方法。效果上,扩展方法使得用附加的方法扩展已存在类型和构造类型成为可能。扩展方法是通过指定关键字this修饰方法的第一个参数而声明的。扩展方法仅可声明在静态类中.
例如:
这样就在string类型上扩展了一个新的方法ToInt32.
在string变量s上直接就可以使用这个扩展方法了.更加详尽的资料请查阅相关文档.
实现IEnumerable的类型会有一些扩展方法如All<>.传递的参数就是Lambda表达式(x => x + 1).今天主要就是写一些自己学习这些方法的笔记.以最简单的数组为例:int[] array = new int[5]{1,2,3,4,5};
以下方法介绍全由array做例子,因为是int型数组,因此下面例子中的一些类型会也是INT型.
1.All<>方法:
All的意思大家都知道,就是全部的意思,这里就是迭代所有元素进行判断,返回布尔值.判断方法就是一个Lambda表达式.
如:
表达式需要返回bool值.
如果每个数组元素都大于1返回true否则false;
2.Any<>方法:
有二个重载,没有参数时,如果数组有元素就返回true否则false.有参数时,迭代所有元素进行判断,只要有元素符合判断就返回true否则false;
如:
3.Contains方法:检查某个元素是否在集合中.
4.AsEnumerable<>方法:返回一个IEnumerable<T>.
5.AsQueryable<>方法:返回一个IQueryable<T>.
6.AsReadOnly方法:返回一个只读IList<T>.
7.Where<>方法:
过滤集合的条件
如:
表达式需要返回bool值.
8.Select<>,SelectMany<>方法:
跟据表达式选择结果,返回该结果的集合.
如:
9.OrderBy<>,OrderByDescending<>,ThenBy<>,ThenByDescending<>,Reverse<>方法:
OrderBy按升序排序,OrderByDescending按降序排序,ThenBy和ThenByDescending进行第二次排序,Reverse反转集合中元素的顺序
如:
表达式需要返回关键字.在这里是int型的元素.
其它排序方法同上.
10.Join<>方法:
连接二个集合,类似SQL中的Join
如:
i是array的key,n是array2的key,最后返回二个数组相同的值的数组集合。返回集合的元素类弄要跟表达式的返回值类型一致.
另外一种写法:
l
未完待续。lihui_830501饿了,吃饭去了。
学习使用扩展方法之前,先学习一下Lambda表达式.Lambda表达式写成一个后面紧跟 => 标记的参数列表,=>之后是一个表达式或表语句块。Lambda表达式的参数可以是显型和隐型的。在显型参数列表中,每个参数的类型是显式指定的。在隐型参数列表中,参数的类型由lambda表达式出现的语境推导--特定地,当lambda表达式被转型到一个兼容的delegate类型时,delegate类型提供参数的类型.在有单一的隐型参数的lambda表达式中,圆括号可以从参数列表中省略。
以下是几种语法实现:
//单一参数
x => x + 1;
x => { return x + 1; };
(int x) => x + 1;
(int x) => { return x + 1; };
//多参数:
(x, y) => x * y;
//无参数:
() => Console.WriteLine();
x => x + 1;
x => { return x + 1; };
(int x) => x + 1;
(int x) => { return x + 1; };
//多参数:
(x, y) => x * y;
//无参数:
() => Console.WriteLine();
单一参数例子:
定义委托
delegate R Func<A, R>(A arg);
在程序里使用
Func<int, int> f1 = x => x+1;
int i = f1(4);
int i = f1(4);
二参数例子:
定义委托
delegate R Func<A, R>(A arg, A arg2);
在程序里使用
Func<int, int> f1 = (x, y) =>
{
if (x > 3)
{
return x + y;
}
else
{
return y;
}
};
int i = f1(4,4);
{
if (x > 3)
{
return x + y;
}
else
{
return y;
}
};
int i = f1(4,4);
i的值为8.
下面再简单介绍一下扩展方法.扩展方法是可以通过使用实例方法语法调用的静态方法。效果上,扩展方法使得用附加的方法扩展已存在类型和构造类型成为可能。扩展方法是通过指定关键字this修饰方法的第一个参数而声明的。扩展方法仅可声明在静态类中.
例如:
public static class Extensions
{
public static int ToInt32(this string s)
{
return Int32.Parse(s);
}
}
{
public static int ToInt32(this string s)
{
return Int32.Parse(s);
}
}
这样就在string类型上扩展了一个新的方法ToInt32.
string s = "1234";
int i = s.ToInt32();
int i = s.ToInt32();
在string变量s上直接就可以使用这个扩展方法了.更加详尽的资料请查阅相关文档.
实现IEnumerable的类型会有一些扩展方法如All<>.传递的参数就是Lambda表达式(x => x + 1).今天主要就是写一些自己学习这些方法的笔记.以最简单的数组为例:int[] array = new int[5]{1,2,3,4,5};
以下方法介绍全由array做例子,因为是int型数组,因此下面例子中的一些类型会也是INT型.
1.All<>方法:
All的意思大家都知道,就是全部的意思,这里就是迭代所有元素进行判断,返回布尔值.判断方法就是一个Lambda表达式.
如:
bool b = array.All(i => i > 1);
表达式需要返回bool值.
如果每个数组元素都大于1返回true否则false;
2.Any<>方法:
有二个重载,没有参数时,如果数组有元素就返回true否则false.有参数时,迭代所有元素进行判断,只要有元素符合判断就返回true否则false;
如:
bool b = array.Any();//因为有5个元素因此返回true.
bool b = array.Any(i => i==0);
//只要数组的其中一个元素等于0就返回true.这里没有等于0的元素,因此返回false.
//表达式需要返回bool值.
bool b = array.Any(i => i==0);
//只要数组的其中一个元素等于0就返回true.这里没有等于0的元素,因此返回false.
//表达式需要返回bool值.
3.Contains方法:检查某个元素是否在集合中.
4.AsEnumerable<>方法:返回一个IEnumerable<T>.
5.AsQueryable<>方法:返回一个IQueryable<T>.
6.AsReadOnly方法:返回一个只读IList<T>.
7.Where<>方法:
过滤集合的条件
如:
IEnumerable<int> array2 = array.Where(i => i > 3);//返回元素大于3的新集合.结果int[2]{4,5}
表达式需要返回bool值.
8.Select<>,SelectMany<>方法:
跟据表达式选择结果,返回该结果的集合.
如:
IEnumerable<int> a3 = array.Select(i => i + 1);//返回所有元素加1后产生的新集合.结果int[5]{2,3,4,5,6}
//表达式需要返回int值.
IEnumerable<int> a4 = array.SelectMany(i => new int[2] { 1, i });//返回每个表达式返回值组合起来的新集合.结果int[10]{1,1,1,2,1,3,1,4,1,5}
//表达式需要返回IEnumerable<int>值.
//表达式需要返回int值.
IEnumerable<int> a4 = array.SelectMany(i => new int[2] { 1, i });//返回每个表达式返回值组合起来的新集合.结果int[10]{1,1,1,2,1,3,1,4,1,5}
//表达式需要返回IEnumerable<int>值.
9.OrderBy<>,OrderByDescending<>,ThenBy<>,ThenByDescending<>,Reverse<>方法:
OrderBy按升序排序,OrderByDescending按降序排序,ThenBy和ThenByDescending进行第二次排序,Reverse反转集合中元素的顺序
如:
IEnumerable<int> a5 = array.OrderBy(i => i);//返回升序后的集合
表达式需要返回关键字.在这里是int型的元素.
其它排序方法同上.
10.Join<>方法:
连接二个集合,类似SQL中的Join
如:
int[] array2 = new int[2] { 1, 2 };
IEnumerable<int[]> a6 = array.Join(array2, i => i, n => n, (x, y) => new int[2] { x, y });
IEnumerable<int[]> a6 = array.Join(array2, i => i, n => n, (x, y) => new int[2] { x, y });
i是array的key,n是array2的key,最后返回二个数组相同的值的数组集合。返回集合的元素类弄要跟表达式的返回值类型一致.
另外一种写法:
IEnumerable<int[]> a7 =from i1 in array
join i2 in array2
on i1 equals i2
select new int[2]{i1,i2};
join i2 in array2
on i1 equals i2
select new int[2]{i1,i2};
未完待续。lihui_830501饿了,吃饭去了。
- .net 3.0+关于实现IEnumerable的类型的扩展方法的使用一
- Asp.net Mvc 未能加载类型“System.Web.Mvc.ViewPage<IEnumerable...的解決方法
- IEnumerable和IEnumerator的使用
- IQueryable和IEnumerable的使用
- 关于使用扩展方法的警告
- 获取IEnumerable中元素的类型
- 关于Linq的ToList(),IEnumerable,IQueryable
- 扩展方法的使用
- 扩展方法的使用
- 利用 IEnumerable接口 实现自定义类型的集合的foreach遍历
- 关于Duilib的扩展——“拖放”实现(一)
- 关于List的扩展方法
- 实现IEnumerable 和 IEnumerator, 使类型具备枚举功能的注意事项
- 如何实现IEnumerable<T>和IEnumerator接口,一个ASP.NET MVC日志模型的实现
- .Net下实现可扩展的编程方法简述
- IEnumerator和IEnumerable是怎样使用的
- C#中的IEnumerable和 IEnumerator的使用
- Firefox扩展开发笔记 - 关于locale的使用(一)
- VC控件--CListCtrl使用技巧(二)
- ListBox中选中的字符串赋给另一个变量
- C++中静态数据成员
- 总结应用和驱动之间用事件通讯的办法
- 利用NAT保护您的内部网络
- .net 3.0+关于实现IEnumerable的类型的扩展方法的使用一
- 总结和感受
- 转 第三次下岗风暴
- 庆祝一下在CSDN的注册帐号
- 一个计算机高手的成长(ZT)
- nt/2000pci设备驱动程序详解
- C编程中,避免产生bug的几种基本编程习惯
- tcp和ip的格式
- Microsoft Office,WPS Office下载地带