我首先說的是,我假定靜態數組初始化器被編譯器轉換爲私有嵌套類,通常使用__StaticArrayInitTypeSize=12
等名稱。據我瞭解,在閱讀this extremely informative article時,這些私有類是值類型,並且它們沒有使用CompilerGeneratedAttribute
類標記。如何辨別Type是否爲靜態數組初始值設定項?
我正在處理需要處理某些類型並忽略其他類型的項目。
我必須能夠處理自定義結構類型,它像生成的靜態數組初始化類一樣是值類型。我必須忽略生成的靜態數組初始化類。我也必須忽略枚舉和代表。
我拉着這些類使用LINQ,就像這樣:
var typesToProcess = allTypes.Where(type => !type.IsEnum &&
!type.IsArray &&
!type.IsSubclassOf(typeof(Delegate)));
我相當肯定的是,IsArray
財產不是我認爲它是。無論如何,生成的靜態數組初始化類仍然顯示在typesToProcess
Enumerable中。
還有其他人處理過嗎?我如何辨別自定義結構和生成的靜態數組初始化類之間的區別?我可以通過將類型名稱與__StaticArrayInitTypeSize
進行字符串比較來破解它,但是有沒有更清晰的解決方案?
一位同事凝視着我的肩膀評論道:「哇,您問了一個值得Jon Skeet回答的問題嗎?」。我確實將通過檢查禁止的字符的成員名稱向前移動。謝謝你的幫助! –
@ R.MichaelRogers:LOL。只是要小心,如果你需要處理*一些*編譯器生成的類型,但不是全部:( –