/// <summary> /// 对数据源中的原有成员的名称和值进行筛选,并将满足筛选的结果写入到数据写入器中。 /// </summary> /// <param name="dataWriter">数据写入器</param> /// <param name="valueFilter">值筛选器</param> public void OnReadAll(IDataWriter <string> dataWriter, IValueFilter <string> valueFilter) { var filter = new DataFilterWriter <string>(dataWriter, valueFilter); if ((flags & XBindingFlags.SkipDefaultValue) != 0) { var valueCopyer = new ValueCopyer(); foreach (var item in fields) { item.OnReadValue(obj, valueCopyer); if (!valueCopyer.IsEmptyValue()) { valueCopyer.WriteTo(filter[item.Name]); } } } else { foreach (var item in fields) { item.OnReadValue(obj, filter[item.Name]); } } }
/// <summary> /// 将数据源中的所有成员的名称和值写入到数据写入器中。 /// </summary> /// <param name="dataWriter">数据写入器</param> public void OnReadAll(IDataWriter <string> dataWriter) { if ((xTypeInfo.flags & XBindingFlags.RWMembersOptIn) != 0) { MembersOptIn(); } else { None(); } void MembersOptIn() { var vc = new ValueCopyer(); var fields = xTypeInfo.rwFields; for (int i = 0; i < fields.Count; i++) { if (fields[i].Value is XAttributedFieldRW fieldRW && fieldRW.CanRead) { if (fieldRW.SkipDefaultValue) { fieldRW.OnReadValue(obj, vc); if (!vc.IsEmptyValue()) { vc.WriteTo(dataWriter[fieldRW.Name]); } } else { fieldRW.OnReadValue(obj, dataWriter[fieldRW.Name]); } } } } void None() { var vc = new ValueCopyer(); var fields = xTypeInfo.rwFields; for (int i = 0; i < fields.Count; i++) { var item = fields[i].Value; if (item.CanRead) { if (item.SkipDefaultValue) { item.OnReadValue(obj, vc); if (!vc.IsEmptyValue()) { vc.WriteTo(dataWriter[item.Name]); } } else { item.OnReadValue(obj, dataWriter[item.Name]); } } } } }
/// <summary> /// 将数据源中的所有成员的名称和值写入到数据写入器中。 /// </summary> /// <param name="dataWriter">数据写入器</param> public void OnReadAll(IDataWriter <string> dataWriter) { const XBindingFlags MembersOptInWithSkipDefaultValue = XBindingFlags.RWSkipDefaultValue | XBindingFlags.RWMembersOptIn; if ((xTypeInfo.flags & MembersOptInWithSkipDefaultValue) == MembersOptInWithSkipDefaultValue) { MembersOptIn_SkipDefaultValue(); } else if ((xTypeInfo.flags & XBindingFlags.RWMembersOptIn) != 0) { MembersOptIn(); } else if ((xTypeInfo.flags & XBindingFlags.RWSkipDefaultValue) != 0) { SkipDefaultValue(); } else { None(); } void MembersOptIn_SkipDefaultValue() { var valueCopyer = new ValueCopyer(); foreach (var item in xTypeInfo.rwFields) { if (item is XAttributedFieldRW fieldRW && fieldRW.CanRead) { fieldRW.OnReadValue(obj, valueCopyer); if (!valueCopyer.IsEmptyValue()) { valueCopyer.WriteTo(dataWriter[fieldRW.Name]); } } } } void MembersOptIn() { foreach (var item in xTypeInfo.rwFields) { if (item is XAttributedFieldRW fieldRW && fieldRW.CanRead) { fieldRW.OnReadValue(obj, dataWriter[fieldRW.Name]); } } } void SkipDefaultValue() { var valueCopyer = new ValueCopyer(); foreach (var item in xTypeInfo.rwFields) { if (item.CanRead) { item.OnReadValue(obj, valueCopyer); if (!valueCopyer.IsEmptyValue()) { valueCopyer.WriteTo(dataWriter[item.Name]); } } } } void None() { foreach (var item in xTypeInfo.rwFields) { if (item.CanRead) { item.OnReadValue(obj, dataWriter[item.Name]); } } } }