<分区>
如何编写一个简单的方法来检查具体类型是否为自定义结构(使用 public struct { };
创建)。
检查 Type.IsValueType
是不够的,因为它也适用于 int
、long
等,
并向 !IsPrimitiveType
添加检查不会排除 decimal
、DateTime
和可能的其他一些值类型。我知道大多数内置值类型实际上是“结构”,但我只想检查“自定义结构”
这些问题大多相同,但没有我需要的答案:
编辑:从提到的答案中,“检查‘系统’前缀”是最稳定的(尽管它仍然是一种 hack)。我最终决定创建一个属性,您必须用它来装饰结构,以便框架将其作为自定义结构来获取。 (我想到的另一种选择是创建一个空接口(interface),让结构体实现那个空接口(interface),但属性方式似乎更优雅)
如果有人感兴趣,这是我原来的自定义结构检查器:
type.IsValueType && !type.IsPrimitive && !type.Namespace.StartsWith("System") && !type.IsEnum