using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestLambdaExpression2
{
static class Program
{
static void Main(string[] args)
{
List allPerson = GetAllPerson();
#region Func
//1.
Func FuncSelector = new Func(heightselector);
Console.WriteLine(GetMaxFunc(allPerson, FuncSelector));
//2.
Func FuncSelector2 = heightselector;
Console.WriteLine(GetMaxFunc(allPerson, FuncSelector2));
//3.
Console.WriteLine(GetMaxFunc(allPerson, heightselector));
//4.
Console.WriteLine(allPerson.GetMaxFunc(heightselector));
//5.使用Lambda Expressions精簡Func之寫作
Console.WriteLine(allPerson.GetMaxFunc(p => p.height));
//6.因為Max為多型,必須先宣告形式才不會發生錯誤
Func FuncSelector3 = heightselector;
Console.WriteLine(allPerson.Max(FuncSelector3));
#endregion
#region Delegate
//1.
heightestSelector DelegateSelector = heightselector;
Console.WriteLine(GetMaxDelegate(allPerson, DelegateSelector));
//2.
Console.WriteLine(GetMaxDelegate(allPerson, heightselector));
//3.
Console.WriteLine(allPerson.GetMaxDelegate(heightselector));
//4.AnonymousDelegate
Console.WriteLine(allPerson.GetMaxDelegate(delegate(Person p) { return p.height; }));
//5.使用Lambda Expressions精簡AnonymousDelegate之寫作
Console.WriteLine(allPerson.GetMaxDelegate(p => p.height));
//6.會發生錯誤,因System.linq.Max需定義Func..不可傳入Delegate,會無法判定型式
//heightestSelector DelegateSelector2 = heightselector;
//Console.WriteLine(allPerson.Max(DelegateSelector2));
//7.使用System.linq.Max,AnonymousDelegate
Console.WriteLine(allPerson.Max(delegate(Person p) { return p.height; }));
//8.使用System.linq.Max,Lambda Expressions精簡AnonymousDelegate之寫作
Console.WriteLine(allPerson.Max(p => p.height));
Man[] mans = Array.ConvertAll(allPerson.ToArray(), p => new Man() { name = p.name, weight = p.weight });
Console.WriteLine(mans.Max(p => p.weight));
#endregion
}
public delegate int heightestSelector(Person p);
public static int heightselector(Person p) { return p.height; }
private static int GetMaxFunc(this List allPerson, Func selector)
{
return (from i in allPerson
select selector(i)).Max();
}
//private static decimal GetMaxFunc(this List allPerson, Func selector)
//{
// return (from i in allPerson
// select selector(i)).Max();
//}
private static int GetMaxDelegate(this List allPerson, heightestSelector selector)
{
return (from i in allPerson
select selector(i)).Max();
}
static List GetAllPerson()
{
List persons = new List();
persons.Add(new Person { name = "A", height = 150, weight = 50 });
persons.Add(new Person { name = "B", height = 160, weight = 60 });
persons.Add(new Person { name = "C", height = 170, weight = 70 });
persons.Add(new Person { name = "D", height = 180, weight = 80 });
persons.Add(new Person { name = "E", height = 190, weight = 90 });
return persons;
}
}
public class Person
{
public string name { get; set; }
public int height { get; set; }
public int weight { get; set; }
}
public class Man
{
public string name { get; set; }
public int weight { get; set; }
}
}
網誌標籤
.NET Framework
(5)
文字編碼
(4)
防毒軟體
(1)
其他
(11)
資料庫
(25)
攝影
(2)
ADO.NET Entity Framework
(2)
ASP.NET
(49)
ASP.NET MVC
(4)
ASP.NET Test
(4)
CSS
(1)
Design Patten
(1)
FCKEditor
(3)
HTML
(2)
HTML5
(1)
hyper-v
(1)
IIS
(6)
JavaScript
(9)
JQuery
(1)
LINQ
(2)
MailTo編碼
(2)
oracle
(6)
RegularExpression
(1)
Rhino Mocks
(1)
Security
(2)
Server2008R2
(1)
SharePoint
(5)
Sql 2008
(1)
SSIS
(1)
SyntaxHighlighter
(1)
TFS2010
(1)
VirtualBox
(1)
VistualStudio2010
(3)
vs2003升級vs2008
(1)
windows
(1)
windows 7
(1)
Delegate,AnonymousDelegate,Func,LambdaExpression,Linq演化過程程式範例
訂閱:
張貼留言 (Atom)

沒有留言:
張貼留言