如何編寫一個簡單的方法,檢查具體類型是否是一個自定義結構(使用public struct { };
創建)。如何確定.NET類型是否是一個自定義結構?
檢查Type.IsValueType
是不夠的,因爲它也是真實的int
,long
等, 並增加了檢查!IsPrimitiveType
將不排除decimal
,DateTime
也許有些其他值類型。我知道,大多數的內置的值類型實際上是「結構」,但我只想要檢查的「自定義結構」
這些問題大多是相同的,但沒有答案,我需要:
編輯:從答案中提到 「檢查 '系統' 前綴」 是最穩定(雖然它仍然是黑客)。我最終決定創建一個屬性,你必須用這個結構來裝飾結構,以便框架將它作爲一個自定義結構來提取。 (我想另一種選擇是創建一個空的接口,讓結構實現一個空接口,但屬性的方式似乎更優雅)
這是我原來的自定義結構檢查,如果有人如果有興趣:
type.IsValueType && !type.IsPrimitive && !type.Namespace.StartsWith("System") && !type.IsEnum
出於好奇,你爲什麼要檢測這個? – Joren 2010-04-26 13:53:26
流利的NHibernate +自動映射:將所有自定義的結構設置爲組件(值對象);設置任何其他值類型爲一個組件(如DateTime或十進制)將崩潰整個框架(至少它在單聲道下) – SztupY 2010-04-26 13:58:39
Add on!type.IsEnum – 2010-08-18 12:10:42