泛型委托 Predicate/Func/Action
来源:互联网 发布:学网络看思科的书好吗 编辑:程序博客网 时间:2024/05/08 14:10
}
public bool ExistString()
{
string str = GetStringList((c) => { return c.Length <= 3 && c.Contains('S'); });
if (str == null)
return false;
else
return true;
}
}
对于Predicate的应用当然这不是什么新鲜事情,今天细细思味一番,觉得C# 真是一门优雅的语言。
以供初学者参考。
笔者本想对以下几种泛型委托一一做些介绍和总结的,在理解Predicate的过程中,发现只要理解了泛型、委托和匿名代理,
当然你晓得Lambda表达式更好,就完全可以在适当的时候灵活应用他们了。也就是说,只是定义不同的delegate而已,
一是 你可以自己定义这样的delegate,再行使用;
二是 你需要知道象Predicate、Func、Action这样的已有好的delegate是如何定义的。或者使用的时候适当查阅下MSDN即可。
如:
Func():封装一个不具有参数但却返回 TResult 参数指定的类型值的方法。
Func(T1, T2, TResult):封装一个具有两个参数并返回 TResult 参数指定的类型值的方法,没有T2就是封装一个具有参数并....。
Action() Action(T1) Action(T2) : 封装一个方法,该方法指定数量的参数(如()无参数,(T1)一个参数,以此类推)并且不返回值。这个和Func有相似处,但无返回值而已。
提醒大家的注意的是:
x=>x+x;
与
X=> {return x+x;} 是等价的。
针对解释我又结合MVC做了下练习。
1、结构
2、如图分别在Controller 下建立PredicateController.cs;Views下建立Predicate文件夹,然后在其下建立index (View)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace PredicatePractice.Controllers
{
public class PredicateController : Controller
{
//
// GET: /Predicate/
public ActionResult Index()
{
List<string> StrList = new List<string>() {
"One","Two","Three","Four","Fice","Six","Seven","Eight","Nine","Ten"
};
string[] arrayList = new string[] {
"One","Two","Three","Four","Fice","Six","Seven","Eight","Nine","Ten"
};
//返回arrayList中长度小于3的单词数组(string[])
string[] NewArray = Array.FindAll(arrayList, c => c.Length < 4);
//返回StrList中中长度小于3的单词数组(List<string>)
List<string> NewList = StrList.FindAll(c => c.Length < 4);
//利用CheckStr方法(泛型委托)来进行筛选
string[] NewArrayUseCheckFunc = Array.FindAll(arrayList, CheckStr);
//利用CheckStr方法(泛型委托)来进行筛选
List<string> NewListUseCheckPredicate = StrList.FindAll(CheckStr);
ViewData["NewArray"] = NewArray;
ViewData["NewList"] = NewList;
ViewData["NewArrayUseCheckFunc"] = NewArrayUseCheckFunc;
ViewData["NewListUseCheckPredicate"] = NewListUseCheckPredicate;
return View();
}
/// <summary>
/// 检查字符串S长度 是否小于4
/// </summary>
/// <param name="S"></param>
/// <returns></returns>
private bool CheckStr(string S)
{
if (S.Length < 4)
return true;
else
return false;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace PredicatePractice.Controllers
{
public class PredicateController : Controller
{
//
// GET: /Predicate/
public ActionResult Index()
{
List<string> StrList = new List<string>() {
"One","Two","Three","Four","Fice","Six","Seven","Eight","Nine","Ten"
};
string[] arrayList = new string[] {
"One","Two","Three","Four","Fice","Six","Seven","Eight","Nine","Ten"
};
//返回arrayList中长度小于3的单词数组(string[])
string[] NewArray = Array.FindAll(arrayList, c => c.Length < 4);
//返回StrList中中长度小于3的单词数组(List<string>)
List<string> NewList = StrList.FindAll(c => c.Length < 4);
//利用CheckStr方法(泛型委托)来进行筛选
string[] NewArrayUseCheckFunc = Array.FindAll(arrayList, CheckStr);
//利用CheckStr方法(泛型委托)来进行筛选
List<string> NewListUseCheckPredicate = StrList.FindAll(CheckStr);
ViewData["NewArray"] = NewArray;
ViewData["NewList"] = NewList;
ViewData["NewArrayUseCheckFunc"] = NewArrayUseCheckFunc;
ViewData["NewListUseCheckPredicate"] = NewListUseCheckPredicate;
return View();
}
/// <summary>
/// 检查字符串S长度 是否小于4
/// </summary>
/// <param name="S"></param>
/// <returns></returns>
private bool CheckStr(string S)
{
if (S.Length < 4)
return true;
else
return false;
}
}
}
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Pradicatepractice
<br />
数组{"One","Two","Three","Four","Fice","Six","Seven","Eight","Nine","Ten"}<br />
--------------Begin--------------<br />
<font color="red"><b>string[] NewArray = Array.FindAll(arrayList, c => c.Length < 3);</b></font><br />
结果:
<% IList<string> NewArray = (ViewData["NewArray"] as IEnumerable<string>).ToList<string>(); %>
<%= Html.Display("<br/>") %>
<% for (int i = 0; i < NewArray.Count; i++) %>
<% { %>
<%= Html.Label(NewArray[i].ToString())%>
<% } %>
<br />
------------------------------<br />
<font color="red"><b>List< string > NewList = StrList.FindAll(c => c.Length < 3);</b></font><br />
结果:
<% IList<string> NewList = (ViewData["NewList"] as IEnumerable<string>).ToList<string>(); %>
<% for (int j = 0; j < NewList.Count; j++) %>
<% { %>
<%= Html.Label(NewList[j].ToString())%>
<% } %>
<br />
------------------------------<br />
<font color="red"><b>Lstring[] NewArrayUseCheckFunc = Array.FindAll(arrayList, CheckStr);</b></font><br />
结果:
<% IList<string> NewArrayUseCheckFunc = (ViewData["NewArrayUseCheckFunc"] as IEnumerable<string>).ToList<string>(); %>
<% for (int k = 0; k < NewArrayUseCheckFunc.Count; k++) %>
<% { %>
<%= Html.Label(NewArrayUseCheckFunc[k].ToString())%>
<% } %>
<br />
------------------------------<br />
<font color="red"><b>List< string > NewListUseCheckPredicate = StrList.FindAll(CheckStr);</b></font><br />
结果:
<% IList<string> NewListUseCheckPredicate = (ViewData["NewListUseCheckPredicate"] as IEnumerable<string>).ToList<string>(); %>
<% for (int l = 0; l < NewListUseCheckPredicate.Count; l++) %>
<% { %>
<%= Html.Label(NewListUseCheckPredicate[l].ToString())%>
<% } %>
<br />
---------------End---------------<br />
</h2>
</asp:Content>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
index
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Pradicatepractice
<br />
数组{"One","Two","Three","Four","Fice","Six","Seven","Eight","Nine","Ten"}<br />
--------------Begin--------------<br />
<font color="red"><b>string[] NewArray = Array.FindAll(arrayList, c => c.Length < 3);</b></font><br />
结果:
<% IList<string> NewArray = (ViewData["NewArray"] as IEnumerable<string>).ToList<string>(); %>
<%= Html.Display("<br/>") %>
<% for (int i = 0; i < NewArray.Count; i++) %>
<% { %>
<%= Html.Label(NewArray[i].ToString())%>
<% } %>
<br />
------------------------------<br />
<font color="red"><b>List< string > NewList = StrList.FindAll(c => c.Length < 3);</b></font><br />
结果:
<% IList<string> NewList = (ViewData["NewList"] as IEnumerable<string>).ToList<string>(); %>
<% for (int j = 0; j < NewList.Count; j++) %>
<% { %>
<%= Html.Label(NewList[j].ToString())%>
<% } %>
<br />
------------------------------<br />
<font color="red"><b>Lstring[] NewArrayUseCheckFunc = Array.FindAll(arrayList, CheckStr);</b></font><br />
结果:
<% IList<string> NewArrayUseCheckFunc = (ViewData["NewArrayUseCheckFunc"] as IEnumerable<string>).ToList<string>(); %>
<% for (int k = 0; k < NewArrayUseCheckFunc.Count; k++) %>
<% { %>
<%= Html.Label(NewArrayUseCheckFunc[k].ToString())%>
<% } %>
<br />
------------------------------<br />
<font color="red"><b>List< string > NewListUseCheckPredicate = StrList.FindAll(CheckStr);</b></font><br />
结果:
<% IList<string> NewListUseCheckPredicate = (ViewData["NewListUseCheckPredicate"] as IEnumerable<string>).ToList<string>(); %>
<% for (int l = 0; l < NewListUseCheckPredicate.Count; l++) %>
<% { %>
<%= Html.Label(NewListUseCheckPredicate[l].ToString())%>
<% } %>
<br />
---------------End---------------<br />
</h2>
</asp:Content>
效果如图:
很清楚了。^_^
0 0
- 泛型委托 Predicate/Func/Action
- 泛型委托 Predicate/Func/Action
- 泛型委托 Predicate/Func/Action ,c#扩展方法
- C#的泛型委托Predicate/Func/Action
- Action、Func、Predicate 和 Converter 泛型委托详解
- C#令人惊喜的泛型委托Predicate、Func、Action
- 系统自带的泛型委托Action<>,Func<>, Predicate<>.
- 委托C#(delegate、Action、Func、predicate,Predicate)
- C# 参考:令人惊喜的泛型委托 Predicate/Func/Action
- C#的委托区别 Action,Func, Predicate
- C#委托类型-(Func,Action,Predicate,lambda)
- C# 委托(Delegate Action Func Predicate)
- C#委托Action、Action<T>、Func<T>、Predicate<T>
- C#委托Action、Action<T>、Func<T>、Predicate<T>
- 【基础】C#:委托Action、Action<T>、Func<T>、Predicate<T>
- C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- C#委托的介绍(delegate、Action、Func、predicate)
- 飞思卡尔 HCS12(X)系列 MCU 的 Prm 文件中的逻辑地址和全局地址的转换
- apache反向代理nginx配置和nat123的使用方法
- libx264编码部分参数说明
- MFC读写XML文件
- 三维人脸识别预处理,3D face recognition preprocess
- 泛型委托 Predicate/Func/Action
- Vmware10下安装Mac OS X Mountain Lion(10.8.5)
- 亚马逊智能手机目标是以3D技术抗衡苹果和谷歌
- 一个清新的CSS表单布局
- SSI框架中配置log4j
- Sql修改表中带默认值约束的字段数据类型
- 听李善友讲移动互联网颠覆式创新
- iOS 通过(lame)将录制音频转换成Mp3
- 可展开的Activity ExpandableListActivity的使用