如何检测被不同XmlElement特性装饰的对象运行时类型
运行时检测XmlElement装饰对象的具体类型
方法一:直接获取实例类型
当你拿到Item属性的实例后,调用GetType()就能直接得到它的具体类型,示例代码如下:
var item = yourObject.Item; Type actualType = item.GetType(); // 根据类型做后续处理 if (actualType == typeof(NumericDataT)) { // 处理Arithmetic类型的逻辑 } else if (actualType == typeof(bool)) { // 处理Boolean类型的逻辑 } // 其余类型可依次判断
方法二:用is/as关键字做类型判断与转换
如果需要同时完成类型检查和转换,is和as关键字会更便捷,还能避免强制转换的异常:
var item = yourObject.Item; if (item is NumericDataT arithmeticData) { // 直接使用arithmeticData进行操作 } else if (item is bool booleanValue) { // 处理布尔值相关逻辑 } // 其他类型按同样方式处理
方法三:通过反射关联类型与XmlElement特性
如果需要获取该类型对应的XML元素名称,可以通过反射读取Item属性上的XmlElementAttribute特性集合,再匹配实例类型:
// 获取目标类中Item属性的XmlElement特性 var propInfo = typeof(YourClass).GetProperty(nameof(YourClass.Item)); var xmlElementAttrs = propInfo.GetCustomAttributes<XmlElementAttribute>(); var item = yourObject.Item; if (item != null) { var matchedAttr = xmlElementAttrs.FirstOrDefault(attr => attr.Type == item.GetType()); if (matchedAttr != null) { string elementName = matchedAttr.ElementName; // 这里拿到的就是对应XML元素的名称,比如"Arithmetic"、"String"等 } }
内容的提问来源于stack exchange,提问作者Tulasi
相关产品推荐
相关产品推荐

