6
所以我只是在學習C#,遇到了一些我覺得奇怪的事情......我在和代表玩,並且創建了一個代表DelegateReturnsInt。現在,當我使用一個的foreach循環,這本書說明了使用這樣的:如何在沒有顯式/隱式覆蓋的情況下拋出foreach?
foreach(DelegateReturnsInt del in theDelegate.getInvocationList())
現在我知道getInvocationList()返回代表[]數組,但它是如何將它們轉換爲DelegateReturnsInt?我問,因爲我想只是玩,它從一個foreach的for循環改變,所以我創造了這個
Delegate[] del = theDelegate.GetInvocationList();
for(int i = 0; i < del.Length; i++){
int result = del[i]();
但這並不見德爾[I]的方法。我試圖鑄造到DelegateReturnsInt等等,但它給了我關於沒有定義的類型錯誤。
我的大問題是什麼讓foreach()如此特別?
Delegate [] del = theDelegate.GetInvocationList(); (int i = 0; i
Nicholas
2010-08-12 20:40:12
https://connect.microsoft.com/VisualStudio/feedback/details/530748/new-fxcop-rule-for-net2-on-foreach-in-non-generic-ienumerable – Guillaume 2011-09-16 08:03:45
是的,有一個存在於「foreach」中的「隱形」或「隱式」轉換(除非我在'foreach'中使用'var',這是我真正推薦的)。這種轉換是不可見的,但它可以同時使用隱式類型轉換和顯式類型轉換。例如,從基類型「Delegate」到派生類型「DelegateReturnsInt」(向下)的引用轉換是C#術語中的_explicit引用轉換。因此,「隱形」轉換也適用於顯式轉換(可能會在運行時或過程中拋出「InvalidCastException」)。 – 2016-07-29 23:25:26