Hi!
How to write a simple method, that checks whether a concrete type is a custom struct (created with public struct { };
) or not.
Checking Type.IsValueType
is not enough, because it is also true to int
, long
, etc,
and adding a check to !IsPrimitiveType
won't exclude decimal
, DateTime
and maybe some other value types. I know that most of the built in value types are actually "structs", but I only want to check for "custom structs"
These questions are mostly the same but without the answer I need:
EDIT: from the answers mentioned the "check for the 'System' prefix" was the most stable (although it's still a hack). I finally decided to create an Attribute that you have to decorate the struct with, in order the framework to pick it up as a custom struct. (The other choice I thought was to create an empty interface, and let the struct implement that empty interface, but the attribute way seemed more elegant)
Here is my original custom struct checker if someone if interested:
type.IsValueType && !type.IsPrimitive && !type.Namespace.StartsWith("System")