Szt*_*upY 7 .net c# reflection struct types
如何编写一个简单的方法,检查具体类型是否是自定义结构(使用public struct { };)创建.
检查Type.IsValueType是不够的,因为这也是千真万确的int,long等,并增加了检查,!IsPrimitiveType将不排除decimal,DateTime也许有些其他值类型.我知道大多数内置值类型实际上是"结构",但我只想检查"自定义结构"
这些问题大致相同但没有我需要的答案:
编辑:从提到的答案"检查'系统'前缀"是最稳定的(虽然它仍然是一个黑客).我最终决定创建一个你必须用它来装饰结构的属性,以便框架将它作为自定义结构来选择.(我想的另一个选择是创建一个空接口,让struct实现那个空接口,但属性方式似乎更优雅)
这是我原来的自定义结构检查器,如果有人感兴趣:
type.IsValueType && !type.IsPrimitive && !type.Namespace.StartsWith("System") && !type.IsEnum
Run Code Online (Sandbox Code Playgroud)
框架中定义的结构与您自己定义的结构之间没有区别.
一些想法可能是:
好吧,DateTime,decimal等符合您的要求.就CLR而言,它们是自定义结构.一个hack,但您可以检查命名空间是否以"System"开头.