1樓:智源小叔父
當乙個類包含陣列成員時,索引器的使用將大大簡化對類中陣列成員的訪問。定義類似於屬性也具有get和set訪問器。具體定義如下:
[修飾符]資料型別 this[索引型別 index]set{}
}索引器可以讓我們像訪問陣列一樣訪問類中的陣列成員。
2樓:深秋的黎明
簡單點來說是因為IList定義了T this[int index]方法,Array、Dictionary、List都實現了IList的T this[int index]方法。而IGrouping沒有定義T this[int index]方法。
3樓:khm1600
如果乙個型別上有System.Reflection.DefaultMemberAttribute ,並且MemberName 是乙個有參例項屬性或乙個有參例項屬性的.
get或.set訪問器(不包括.other),並且這個屬性有.
get或.set,那麼這個型別的值就是可以用索引器的。比如:
[ .Reflection .DefaultMember ("X" )>]type public Foo= member public __.X with getx :int=x 和Public Class BarPublic PropertyX( yAsInteger)As Integer GetReturn yEnd GetSet (value AsInteger )End SetEnd Property EndClass以及[ System ::Reflection ::DefaultMember ("set_X" )]public refclass Baz}; 甚至.class public auto ansi beforefieldinit Foobar extends [mscorlib]System.Object { .custom instance void [mscorlib]System.Reflection. DefaultMemberAttribute::.ctor(string) = (01 00 01 58 00 00) .method public hidebysig specialname instance int32 get(int32 x) cil managedldarg.1 retmethod public hidebysig specialname rtspecialname instance void .ctor() cil managedldarg.0 call instance void [mscorlib]System.Object::.ctorretmethod public hidebysig instance void Y() cil managedretproperty instance int32 X(int32 xget instance int32 Foobar:: get(int32other instance void Foobar::Y 都是可以用索引器的。 4樓:czh098tom IEnumerable介面,顧名思義,只宣告了乙個集合或假想中存在的集合是可以遍歷的,即可以通過迴圈來訪問集合中的所有元素,至於這麼訪問的、訪問的是什麼順序的、每次訪問的時候是不是返回統一結果,都可以隨意處理。索引器要求的是一種隨機訪問的能力,而這是IEnumerable的宣告中並不具備的,所以IEnumerable介面必然不會要求實現索引器。 具體一點講,IGrouping產生自LINQ的GroupBy擴充套件方法,它應用在乙個任意的實現了IEnumerable介面的集合上,這個集合本身的情況是未知的,因此在這種情況下也不能期望IGrouping一定是具有隨機訪問能力的,故不會設計乙個隨機訪問能力給它。 (甚至更離譜的是,因為LINQ是惰性求值的,所以IGrouping物件生成的時候查詢實際並未執行,只有在呼叫IGrouping.GetEnumerator之後才執行) 5樓: 如果是執行時中要判斷的話可以去判斷乙個特殊的方法MethodImplAttributes Enum (System.Reflection) MethodAttributes Enum (System.Reflection) MethodBase.IsHideBySig Property (System.Reflection) 不過我看你的需求應該不是追求執行時?一般來說查查文件都會說。 6樓: 因為 IEnumerable 介面本來就沒有要求實現索引器。 具體說 IGrouping ,如果你已經要呼叫索引器查詢具體值,此時應該先用 linq 提供的方法轉換成字典等其他型別再做查詢。 7樓:旋鈕 索引器不是IEnumerable帶的,它乙個只關注遍歷的非常底層的介面,不可能帶索引這種高階貨,就算是更高一級的ICollection都沒有,得到IList/IDictionary這一級的才定義了索引器,所以這就是有些可以有些不可以的原因,它們實現的起點不同。至於如何判斷,就是看它有沒有定義,編輯器裡直接敲方括號就知道,或者F12或者看文件,或者走反射判斷有沒有GetIndexParameters().Length ! = 0的屬性,方法多的是。 8樓:main 你的問題已經回答了你 索引器就是屬性,不能索引說明這個類沒有做這個屬性就像乙個類沒有某個方法一樣,沒有某個方法你就點不出來,但方法可以自定義擴充套件,而屬性和索性沒有辦法擴充套件 你可以在外面再套一層實現類 dodoleon 直接用c 11的 std is base of 就可以判斷是否是通過乙個基類繼承下來的。 Certain Y template size t m constexpr auto string equal const char value n const char o m for in... 福州禪武 國家武術散打隊黨支部全體成員參觀了八路軍西安辦事處。你看他們的站姿是不是很想打架的感覺,下次我遇到散打專業運動走路的動態再補上。 執悲今厄 五種情況 遇險 躲避 出腿 出拳 呼吸。一,當遭遇突發情況時 習武者 雙膝微曲。普通人 全身繃直。二,當躲避攻擊時 習武者 跨步,曲膝向前。普通人 不... Rico 如果假定指標非堆即棧,不考慮 code bss mmap 這些段位址的話,應該是可以的。提供乙個思路 1 讀取暫存器狀態 2 通過 rbp ebp 回溯堆疊,找到頂級堆疊的 ebp,也就是整個程序 執行緒 的堆疊起始位址 3 使用指標位址與堆疊起始位址比較,差值與平台相關的最大堆疊size...C 裡,如何在乙個類廠裡,用靜態方式判斷乙個類是否繼承自某個類??
如何通過走姿判斷乙個人是否習武?
c 中能否判斷乙個指標指向棧還是堆?