書籍,書籍集合,從書籍集合中查找符合條件的書籍
(一)書籍
public class Book
{
public int Unid { get; set; }
public string Name { get; set; }
public int Price { get; set; }
public string Publisher { get; set; }
}
(二)書籍集合
public static class BookHelper
public static IList<Book> SearchBook(IList<Book> list)
{
IList<Book> _list = new List<Book>();
foreach (Book book in list)
{
if (book.Price < 100)
_list.Add(book);
}
return _list;
}
從書籍集合中查找價格在100以下的書籍。這裡采用了擴充方法。是以可以以
BookHelper.SearchBook的方式來調用方法
(三)測試
(1)準備
IList<Book> _list = new List<Book>();
[SetUp]
public void Init()
_list.Add(new Book { Price = 20, Name = "book1" });
_list.Add(new Book { Price = 320, Name = "book6" });
_list.Add(new Book { Price = 200, Name = "book2" });
_list.Add(new Book { Price = 80, Name = "book3" });
_list.Add(new Book { Price = 870, Name = "book4" });
_list.Add(new Book { Price = 250, Name = "book5" });
(2)測試
[Test(Description="原始方法")]
public void TestOrigin()
List<Book> _newList = BookHelper.SearchBook(_list) as List<Book>;
foreach (Book book in _newList)
Console.WriteLine(book.Name);
(四)現在把價格判斷分離到獨立的方法
public static IList<Book> SearchBook1(IList<Book> list)
IList<Book> _list = new List<Book>();
foreach (Book book in list)
{
if (CheckCondition(book))
_list.Add(book);
}
return _list;
public static bool CheckCondition(Book book)
if (book.Price < 100)
return true;
return false;
}
(五)測試
[Test(Description = "分離判斷方法")]
public void TestOrigin1()
List<Book> _newList = BookHelper.SearchBook1(_list) as List<Book>;
foreach (Book book in _newList)
Console.WriteLine(book.Name);
(六)通過委托來傳遞判斷方法
public delegate bool DCheckCondition(Book book);
/// <summary>
/// 傳遞分離的判斷方法
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public static IList<Book> SearchBook2(IList<Book> list,DCheckCondition check)
IList<Book> _list = new List<Book>();
foreach (Book book in list)
if (check(book))
_list.Add(book);
return _list;
(七)測試
[Test(Description = "傳遞分離的判斷方法")]
public void TestOrigin2()
List<Book> _newList = BookHelper.SearchBook2(_list,BookHelper.CheckCondition) as List<Book>;
(八)自定義判斷方法
[Test(Description = "代理傳遞分離的判斷方法")]
public void TestOrigin3()
{
List<Book> _newList = BookHelper.SearchBook2(_list,
new LOrigin.BookHelper.DCheckCondition(CheckCondition)) as List<Book>;
foreach (Book book in _newList)
Console.WriteLine(book.Name);
}
public bool CheckCondition(Book book)
if (book.Price < 100)
return false;
(九)使用匿名方法來替換
[Test(Description = "匿名方法")]
public void TestOrigin4()
IList<Book> _newList = BookHelper.SearchBook2(_list,
delegate(Book book) { return book.Price < 100; });
(十)匿名方法符号化
[Test(Description = "匿名方法的符号化")]
public void TestOrigin5()
IList<Book> _newList = BookHelper.SearchBook2(_list,book => book.Price <100);
Console.WriteLine(book.Name);
(十一)
[Test(Description = "IList的靜态方法Where,并采用goes to")]
public void TestOrigin6()
IList<Book> _newList = _list.Where(book => book.Price < 100).ToArray<Book>();
不管是IList還是IList都可以使用這個Where方法了但是做集合操作的時候我們不僅僅需要Where,還需要OrderBy,Group等等,我想把所有的SQL能幹的都移植過來。當然微軟也意識到了這點,如是在.net 3.5裡,微軟釋出了我們夢寐以求的Linq,将查詢內建到語言裡面來。它給IEnumerable添加了很多擴充方法,這樣你可以很自然的去調用。你可以使用Reflector打開System.Core.dll,打開System.Linq命名空間,在這個命名空間裡有一個Enumerable類,這裡面就是微軟為我們添加的擴充方法,看看,是不是SQL裡所有的東西都可以在這裡找到了
部落格園大道至簡
<a href="http://www.cnblogs.com/jams742003/" target="_blank">http://www.cnblogs.com/jams742003/</a>
轉載請注明:部落格園