/// <summary> /// 添加字段 /// </summary> /// <param name="field">字段信息</param> public void PushMemberMap(fieldIndex field) { Label isMember = generator.DefineLabel(); generator.memberMapIsMember(OpCodes.Ldarg_2, field.MemberIndex); generator.Emit(OpCodes.Brfalse_S, isMember); Push(field); generator.MarkLabel(isMember); }
/// <summary> /// 添加字段 /// </summary> /// <param name="field">字段信息</param> public void Push(fieldIndex field) { generator.Emit(OpCodes.Ldarg_0); if (field.Member.FieldType.IsValueType) { generator.Emit(OpCodes.Ldflda, field.Member); generator.Emit(OpCodes.Initobj, field.Member.FieldType); } else { generator.Emit(OpCodes.Ldnull); generator.Emit(OpCodes.Stfld, field.Member); } }
/// <summary> /// 添加字段 /// </summary> /// <param name="field">字段信息</param> public void Push(fieldIndex field) { generator.Emit(OpCodes.Ldarg_0); if (isValueType) { generator.Emit(OpCodes.Ldarga_S, 1); } else { generator.Emit(OpCodes.Ldind_Ref); generator.Emit(OpCodes.Ldarg_1); } generator.Emit(OpCodes.Ldfld, field.Member); generator.Emit(OpCodes.Stfld, field.Member); }
/// <summary> /// /// </summary> /// <param name="field"></param> /// <returns></returns> internal static memberInfo GetSerialize(fieldIndex field) { memberInfo member = new memberInfo(field); Type type = field.Member.FieldType; if (type.IsEnum) cSharp.dataSerialize.FixedSizes.TryGetValue(type.GetEnumUnderlyingType(), out member.SerializeFixedSize); else if (type.IsValueType) { Type nullType = type.nullableType(); if (nullType == null) { cSharp.dataSerialize.FixedSizes.TryGetValue(type, out member.SerializeFixedSize); if (type == typeof(bool)) member.NullMapSize = 1; } else { member.NullMapSize = type == typeof(bool?) ? (byte)2 : (byte)1; cSharp.dataSerialize.FixedSizes.TryGetValue(nullType, out member.SerializeFixedSize); } } else member.NullMapSize = 1; return member; }
/// <summary> /// 字段信息 /// </summary> /// <param name="field">字段信息</param> /// <param name="attribute">数据库成员信息</param> internal fieldInfo(fieldIndex field, dataMember attribute) { Field = field.Member; MemberMapIndex = field.MemberIndex; DataMember = dataMember.FormatSql(attribute, Field.FieldType, ref IsSqlColumn); if ((NullableDataType = DataMember.DataType) == null) { NullableDataType = Field.FieldType; } if ((DataReaderMethod = fastCSharp.emit.pub.GetDataReaderMethod(DataType = NullableDataType.nullableType() ?? NullableDataType)) == null) { if (IsSqlColumn) { if (isSqlColumn(DataType)) { return; } IsSqlColumn = false; } #if NOJIT DataType = NullableDataType = typeof(string); DataReaderMethod = fastCSharp.emit.pub.GetDataReaderMethodInfo; #else DataReaderMethod = fastCSharp.emit.pub.GetDataReaderMethod(DataType = NullableDataType = typeof(string)); #endif IsUnknownJson = true; ToSqlCastMethod = fastCSharp.emit.jsonSerializer.SqlToJsonMethod.MakeGenericMethod(Field.FieldType); ToModelCastMethod = fastCSharp.emit.jsonParser.SqlParseMethod.MakeGenericMethod(Field.FieldType); } else { ToSqlCastMethod = fastCSharp.emit.pub.GetCastMethod(Field.FieldType, DataType); ToModelCastMethod = fastCSharp.emit.pub.GetCastMethod(DataType, Field.FieldType); } SqlFieldName = new fastCSharp.stateSearcher.asciiSearcher(keywords).Search(Field.Name.ToLower()) < 0 ? Field.Name : toSqlName(Field.Name); ToSqlMethod = fastCSharp.emit.pub.GetSqlConverterMethod(DataType); }
/// <summary> /// 字段信息 /// </summary> /// <param name="field"></param> /// <param name="attribute"></param> public fieldInfo(fieldIndex field, dataMember attribute) { Field = field.Member; DataMember = attribute; MemberMapIndex = field.MemberIndex; }