如何在C#中对DataMember属性值进行求和合并?
问题描述
我定义了如下事件类:
[Serializable] [DataContract] public class BaseEvent { [DataMember] public int count { get; set; } [DataMember] public SubEventClass SubEventClass { get; set; } }
以及如下的SubEventClass类:
[Serializable] [DataContract] public class SubEventClass { [DataMember] public int Width { get; set; } [DataMember] public long Length { get; set; } [DataMember] public long Area { get; set; } }
我期望通过调用以下方法合并/求和两个BaseEvent对象的属性值:
public static BaseEvent MergeQueryShapeStats(BaseEvent obj1, BaseEvent obj2) { obj1.count += obj2.count; var properties = typeof(SubEventClass).GetProperties(); foreach (var prop in properties) { var value = prop.GetValue(obj2.SubEventClass, null); if (value != null) prop.SetValue(obj1.SubEventClass, value, null); } return obj1; }
但目前这段代码只是将obj2的属性值直接赋值给obj1,请问如何修改才能将obj2与obj1的属性值求和后更新obj1?
解决方案
你需要获取obj1对应属性的当前值,与obj2的属性值相加后再赋值回obj1,同时要处理空引用检查和不同数值类型的转换,以下是修改后的完整方法:
public static BaseEvent MergeQueryShapeStats(BaseEvent obj1, BaseEvent obj2) { // 处理count字段的求和 obj1.count += obj2.count; // 空引用检查:如果任一SubEventClass为null,直接处理避免报错 if (obj1.SubEventClass == null || obj2.SubEventClass == null) { // 若obj1的子对象为空,则用obj2的子对象替换(若两者都为空则保持null) obj1.SubEventClass = obj1.SubEventClass ?? obj2.SubEventClass; return obj1; } var properties = typeof(SubEventClass).GetProperties(); foreach (var prop in properties) { // 获取obj1和obj2当前属性的值 var value1 = prop.GetValue(obj1.SubEventClass); var value2 = prop.GetValue(obj2.SubEventClass); // 根据属性类型执行求和操作 if (prop.PropertyType == typeof(int)) { var sum = (int)value1 + (int)value2; prop.SetValue(obj1.SubEventClass, sum); } else if (prop.PropertyType == typeof(long)) { var sum = (long)value1 + (long)value2; prop.SetValue(obj1.SubEventClass, sum); } // 后续若新增其他数值类型(如float、double),可在此扩展分支 } return obj1; }
关键修改说明:
- 空引用防护:增加了对
obj1.SubEventClass和obj2.SubEventClass的空值判断,避免运行时抛出NullReferenceException - 求和逻辑替换:不再直接覆盖obj1的属性值,而是先获取obj1的原有值,与obj2的值相加后再赋值
- 类型针对性处理:针对
int和long两种不同的数值类型分别处理,确保类型转换安全,避免出现类型不匹配的错误
内容的提问来源于stack exchange,提问作者Deritha
相关产品推荐
相关产品推荐

