日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

c# 扩展方法奇思妙用高级篇一:改进 Scottgu 的 In 扩展

發布時間:2023/12/20 C# 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c# 扩展方法奇思妙用高级篇一:改进 Scottgu 的 In 扩展 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
先看下ScottGu對In的擴展:

調用示例1:

調用示例2:

原文地址:New "Orcas" Language Feature: Extension Methods

很多介紹擴展方法的也大都使用"In"作為例子,但很少有人再深入想一步。個人感覺這個In擴展的不夠徹底,試看如下代碼:
????????public?static?void?Example1()
????????{
????????????
bool?b1?=?1.In(new?int[]?{?1,?2,?3,?4,?5?});
????????????
bool?b2?=?"Tom".In(new?string[]?{?"Bob",?"Kitty",?"Tom"?});
????????}

????????
//ScottGu?In擴展
????????public?static?bool?In(this?object?o,?IEnumerable?c)
????????{
????????????
foreach?(object?i?in?c)
????????????{
????????????????
if?(i.Equals(o))?return?true;
????????????}
????????????
return?false;
????????}

每次使用 In 時都要聲明一個數組(或集合),有點麻煩,如果像下面這個樣子調用應該比較簡單一些:
????????public?static?void?Example2()
????????{
????????????
bool?b1?=?1.In(1,?2,?3,?4,?5);
????????????
bool?b2?=?1.In(1,?2,?3,?4,?5,?5,?7,?8);
????????????
bool?b3?=?"Tom".In("Bob",?"Kitty",?"Tom");
????????????
bool?b4?=?"Tom".In("Bob",?"Kitty",?"Tom",?"Jim");
????????}
感覺如何,是否有點類似SQL中的In?

如何擴展的呢,很簡單,這里使用了 params 這個“方法參數關鍵字”(MSDN中名字),還是看代碼吧!
通過 params 我們不必再顯式聲明數組了,省了不少“筆墨”。
????????//ScottGu?In擴展?改進
????????public?static?bool?In(this?object?o,?params?object[]?c)
????????{
????????????
foreach?(object?i?in?c)
????????????????
if?(i.Equals(o))?return?true;
????????????
return?false;
????????}

上面一直是對 object 進行擴展,但存在一個很大的隱患,你的代碼可能會不注意寫成以下的樣子
????????public?static?void?Example3()
????????{
????????????
string?name?=?"Application1";

????????????
string?name1?=?"Bob";
????????????
string?name2?=?"Kitty";
????????????
string?name3?=?"Tom";
????????????
string?s?=?"Tom";
????????????
bool?b1?=?s.In(name1,?name2,?name3);
????????????
bool?b2?=?s.In(name1,?name2,?name,?3);//不注意加了個小逗號
????????}
編譯,照樣運行,出了錯很難查找原因。幸好我們c#有泛型,最后改進一次:
????????//ScottGu?In擴展?改進
????????public?static?bool?In<T>(this?T?t,?params?T[]?c)
????????{
????????????
return?c.Any(i?=>?i.Equals(t));
????????}
再編譯,通不過了,報錯如下:

問題解決了。

技術總結:我們使用 params 和 泛型改進了 ScottGu?的?In 擴展,使用調用代碼更加簡潔,同時也能減少編程中的誤輸入。
思想總結:網上好多文章都是轉來轉去,沒有自己的想法,其它只要深入想一步,會有很多新發現。

《c#擴展方法奇思妙用》是個專題,包含很多方面的應用,請保持關注!謝謝!

總結

以上是生活随笔為你收集整理的c# 扩展方法奇思妙用高级篇一:改进 Scottgu 的 In 扩展的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。