使用C 的擴充套件方法替代For迴圈

2021-05-26 21:51:12 字數 1324 閱讀 8289

在c# 3.0中,引進了extension methods,伴隨而來的是乙個新玩意兒linq。用實用工具reflector.exe開啟system.core.dll中的 system.linq命名空間,有個enumerable靜態類,其中有大量的對"陣列"操作的擴充套件方法(你能想到的基本都有,不信就去看看!)。(文/k#)

對於用慣了for迴圈的朋友,如果要他/她停止使用,肯定會覺得日子沒法過了。放心好了,我不會勸他/她停止使用的,就像戒菸一樣,都是自己的事。(又一次跑題,言歸正傳!)

下面我用**來演示,如何用"擴充套件方法/linq"來乾掉"for迴圈":

[test]

public void oldsum()

assert.areequal(45, sum0);

}[test]

public void newsum()

複製**

注:無論是對一串數字求和還是求積,歸根到底,都是把一串東西變成乙個東西,此時就用aggregate!

[test]

public void oldfilter()

;listodd_list = new list();

for (int i = 0; i < arr.length; i++)

}int odd_arr = odd_list.toarray();

assert.that(odd_arr, is.equivalentto(new int ));

}[test]

public void newfilter()

;int odd_arr = arr.where(x => x % 2 == 1).toarray();

assert.that(odd_arr, is.equivalentto(new int ));

}複製**

注:無論是取奇數還是偶數,歸根到底,都是取一串東西中的某些東西,此時就用where!

[test]

public void oldmap()

;listnew_list = new list();

for (int i = 0; i < arr.length; i++)

int new_arr = new_list.toarray();

assert.that(new_arr, is.equivalentto(new int ));

}[test]

public void newmap()

;int new_arr = arr.select(x => x * 10).toarray();

assert.that(new_arr, is.equivalentto(new int ));

}複製**

c 擴充套件方法的使用

擴充套件方法使您能夠向現有型別 新增 方法,而無需建立新的派生型別 重新編譯或以其他方式修改原始型別。你一定很疑問什麼是擴充套件方法!什麼是擴充套件方法?回答這個問題之前,先看看我們一般情況下方法的呼叫。類似這樣的通用方法你一定寫過 static void main string args 將字串轉...

C 擴充套件方法的使用

c 擴充套件方法可以在不繼承原有類的基礎上,為原有類新增方法,c 擴充套件方法可以合併到要原有類的例項上,擴充套件方法需要定義為靜態方法,並且第乙個引數必須為要擴充套件型別的當前例項 引數前加this關鍵字 public static class extendstring 首先定義乙個靜態類,定義乙...

C 擴充套件方法的使用

c 3.0引入了擴充套件方法的概念,乍一聽起來不是很好理解,我們舉乙個簡單的例子 有乙個業務場景,需要頻繁地判斷乙個字串內是否包含阿拉伯數字,字串的contains方法是沒有辦法實現的,那麼可以考慮寫乙個公共方法,封裝乙個方法隨時來判斷,類似下面這樣的 public static class str...