private void InitInfo() { accessorDict = new Dictionary <string, Accessor>(Properties.Length); FieldAttrDict = new Dictionary <PropertyInfo, OrmFieldAttribute>(Properties.Length); foreach (var prop in Properties) { Accessor accessor = null; string propName = prop.Name.ToUpper(); var propType = prop.PropertyType; if (propType.IsEnum) { propType = propType.GetEnumUnderlyingType(); } if (typeof(string) == propType) { accessor = new StringAccessor(prop); } else if (typeof(int) == propType) { accessor = new IntAccessor(prop); } else if (typeof(int?) == propType) { accessor = new IntNullableAccessor(prop); } else if (typeof(DateTime) == propType) { accessor = new DateTimeAccessor(prop); } else if (typeof(DateTime?) == propType) { accessor = new DateTimeNullableAccessor(prop); } else if (typeof(long) == propType) { accessor = new LongAccessor(prop); } else if (typeof(long?) == propType) { accessor = new LongNullableAccessor(prop); } else if (typeof(float) == propType) { accessor = new FloatAccessor(prop); } else if (typeof(float?) == propType) { accessor = new FloatNullableAccessor(prop); } else if (typeof(double) == propType) { accessor = new DoubleAccessor(prop); } else if (typeof(double?) == propType) { accessor = new DoubleNullableAccessor(prop); } else if (typeof(Guid) == propType) { accessor = new GuidAccessor(prop); } else if (typeof(Guid?) == propType) { accessor = new GuidNullableAccessor(prop); } else if (typeof(short) == propType) { accessor = new ShortAccessor(prop); } else if (typeof(short?) == propType) { accessor = new ShortNullableAccessor(prop); } else if (typeof(byte) == propType) { accessor = new ByteAccessor(prop); } else if (typeof(byte?) == propType) { accessor = new ByteNullableAccessor(prop); } else if (typeof(char) == propType) { accessor = new CharAccessor(prop); } else if (typeof(char?) == propType) { accessor = new CharNullableAccessor(prop); } else if (typeof(decimal) == propType) { accessor = new DecimalAccessor(prop); } else if (typeof(decimal?) == propType) { accessor = new DecimalNullableAccessor(prop); } else if (typeof(byte[]) == propType) { accessor = new ByteArrayAccessor(prop); } else if (typeof(bool) == propType) { accessor = new BoolAccessor(prop); } else if (typeof(bool?) == propType) { accessor = new BoolNullableAccessor(prop); } else if (typeof(TimeSpan) == propType) { accessor = new TimeSpanAccessor(prop); } else if (typeof(TimeSpan?) == propType) { accessor = new TimeSpanNullableAccessor(prop); } accessorDict[propName] = accessor; //自定义属性 var customerAttributes = prop.GetCustomAttributes(typeof(OrmFieldAttribute), false); if (customerAttributes == null || customerAttributes.Length == 0) { FieldAttrDict[prop] = null; } else { FieldAttrDict[prop] = (OrmFieldAttribute)customerAttributes[0]; } } }
private void InitInfo(Type modelType) { accessorDict = new Dictionary <string, Accessor>(); var Properties = TypeCache.GetTable(modelType).Fields; foreach (var kv in Properties) { Accessor accessor = null; var prop = kv.GetPropertyInfo(); string propName = prop.Name.ToUpper(); var propType = prop.PropertyType; if (propType.IsEnum) { propType = propType.GetEnumUnderlyingType(); } if (typeof(string) == propType) { accessor = new StringAccessor(prop); } else if (typeof(int) == propType) { accessor = new IntAccessor(prop); } else if (typeof(int?) == propType) { accessor = new IntNullableAccessor(prop); } else if (typeof(DateTime) == propType) { accessor = new DateTimeAccessor(prop); } else if (typeof(DateTime?) == propType) { accessor = new DateTimeNullableAccessor(prop); } else if (typeof(long) == propType) { accessor = new LongAccessor(prop); } else if (typeof(long?) == propType) { accessor = new LongNullableAccessor(prop); } else if (typeof(float) == propType) { accessor = new FloatAccessor(prop); } else if (typeof(float?) == propType) { accessor = new FloatNullableAccessor(prop); } else if (typeof(double) == propType) { accessor = new DoubleAccessor(prop); } else if (typeof(double?) == propType) { accessor = new DoubleNullableAccessor(prop); } else if (typeof(Guid) == propType) { accessor = new GuidAccessor(prop); } else if (typeof(Guid?) == propType) { accessor = new GuidNullableAccessor(prop); } else if (typeof(short) == propType) { accessor = new ShortAccessor(prop); } else if (typeof(short?) == propType) { accessor = new ShortNullableAccessor(prop); } else if (typeof(byte) == propType) { accessor = new ByteAccessor(prop); } else if (typeof(byte?) == propType) { accessor = new ByteNullableAccessor(prop); } else if (typeof(char) == propType) { accessor = new CharAccessor(prop); } else if (typeof(char?) == propType) { accessor = new CharNullableAccessor(prop); } else if (typeof(decimal) == propType) { accessor = new DecimalAccessor(prop); } else if (typeof(decimal?) == propType) { accessor = new DecimalNullableAccessor(prop); } else if (typeof(byte[]) == propType) { accessor = new ByteArrayAccessor(prop); } else if (typeof(bool) == propType) { accessor = new BoolAccessor(prop); } else if (typeof(bool?) == propType) { accessor = new BoolNullableAccessor(prop); } else if (typeof(TimeSpan) == propType) { accessor = new TimeSpanAccessor(prop); } else if (typeof(TimeSpan?) == propType) { accessor = new TimeSpanNullableAccessor(prop); } accessorDict[propName] = accessor; } }
public Channel(IntermediateNode root) { //Fetch from nodes foreach (LeafNode channelSubNode in root) { if (channelSubNode.Name.Equals("header", StringComparison.OrdinalIgnoreCase)) { ReadHeader(channelSubNode); } else if (channelSubNode.Name.Equals("frames", StringComparison.OrdinalIgnoreCase)) { channelData = channelSubNode.ByteArrayData; } } FrameType frameType = FrameType.Float; QuaternionMethod = QuaternionMethod.Full; bool vec = false; bool quat = false; bool comp = false; bool floats = false; switch (ChannelType) { case BIT_NORM: case 0x50: case 0x40: comp = true; break; case BIT_VEC: case 0x22: vec = true; break; case BIT_QUAT: quat = true; break; case BIT_VEC | BIT_QUAT: vec = true; quat = true; break; case BIT_VEC | BIT_NORM: case BIT_VEC | 0x40: //special case normal? unsure frameType = FrameType.VecWithQuat; QuaternionMethod = QuaternionMethod.HalfAngle; vec = true; comp = true; break; default: floats = true; break; } InterpretedType = frameType; if (Interval == -1) { Times = new FloatAccessor(this, 0); stride += 4; } if (vec) { Positions = new Vector3Accessor(this, stride); stride += 12; } if (quat) { Quaternions = new QuaternionAccessor(this, stride); stride += 16; } if (comp) { Quaternions = new CompressedAccessor(this, stride); stride += 6; } if (floats) { Angles = new FloatAccessor(this, stride); stride += 4; } }