【发布时间】:2011-02-12 10:08:18
【问题描述】:
如何编写一个简单的方法,检查具体类型是否为自定义结构(使用public struct { }; 创建)。
检查Type.IsValueType是不够的,因为int、long等也是如此,
并向!IsPrimitiveType 添加检查不会排除decimal、DateTime 以及可能的其他一些值类型。我知道大多数内置值类型实际上是“结构”,但我只想检查“自定义结构”
这些问题大多相同,但没有我需要的答案:
编辑:从提到的答案中,“检查'系统'前缀”是最稳定的(尽管它仍然是一个黑客)。我最终决定创建一个属性,你必须用它来装饰结构,以便框架将其作为自定义结构拾取。 (我想到的另一种选择是创建一个空接口,让struct实现那个空接口,但属性的方式似乎更优雅)
如果有人感兴趣,这是我原来的自定义结构检查器:
type.IsValueType && !type.IsPrimitive && !type.Namespace.StartsWith("System") && !type.IsEnum
【问题讨论】:
-
只是出于好奇,你为什么要检测这个?
-
Fluent NHibernate + 自动映射:将所有自定义结构设置为组件(值对象)处理;将任何其他值类型设置为组件(如 DateTime 或小数)将使整个框架崩溃(至少在单声道下会崩溃)
标签: c# .net reflection struct types