static DoubleConverter() { DoubleConverter.FromBoolean = (bool val) => { if (!val) { return(0); } return(1); }; DoubleConverter.FromByte = (byte val) => (double)val; DoubleConverter.FromChar = (char val) => (double)val; DoubleConverter.FromDateTime = (DateTime val) => (double)val.ToFileTimeUtc(); DoubleConverter.FromDecimal = (decimal val) => (double)((double)val); DoubleConverter.FromDouble = (double val) => val; DoubleConverter.FromInt16 = (short val) => (double)val; DoubleConverter.FromInt32 = (int val) => (double)val; DoubleConverter.FromInt64 = (long val) => (double)val; DoubleConverter.FromSByte = (sbyte val) => (double)val; DoubleConverter.FromSingle = (float val) => (double)val; DoubleConverter.FromUInt16 = (ushort val) => (double)val; DoubleConverter.FromUInt32 = (uint val) => (double)((float)val); DoubleConverter.FromUInt64 = (ulong val) => (double)((float)val); DoubleConverter.FromObject = (object val) => Convert.ToDouble(val, CultureInfo.InvariantCulture); DoubleConverter.FromTimeSpan = (TimeSpan val) => val.TotalSeconds; }
private void BuildParameterAccessors <TProperty>(string paramName, MethodInfo getter) { MeasurementEventMetadata <TEvent> .PropertyAccessor <TProperty> propertyAccessor = (MeasurementEventMetadata <TEvent> .PropertyAccessor <TProperty>)Delegate.CreateDelegate(typeof(MeasurementEventMetadata <> .PropertyAccessor <TEvent, TProperty>), getter); MeasurementEvent <TEvent> .StringParameterAccessor stringParameterAccessor = (TEvent ev) => { string str; try { TProperty tProperty = propertyAccessor(ev); str = (tProperty == null ? "" : tProperty.ToString()); } catch (Exception exception1) { Exception exception = exception1; throw new MeasurementEventException(string.Concat(new string[] { "Exception getting property ", propertyAccessor.Method.Name, " of measurement event class ", typeof(TEvent).FullName, " as a string: ", exception.Message }), exception); } return(str); }; DoubleConverter.Conversion <TProperty> conversion = DoubleConverter.GetConversion <TProperty>(); MeasurementEvent <TEvent> .NumericParameterAccessor numericParameterAccessor = (TEvent ev) => { double num; try { num = conversion(propertyAccessor(ev)); } catch (Exception exception1) { Exception exception = exception1; throw new MeasurementEventException(string.Concat(new string[] { "Exception getting property ", propertyAccessor.Method.Name, " of measurement event class ", typeof(TEvent).FullName, " as a double: ", exception.Message }), exception); } return(num); }; try { this.stringParams.Add(paramName, stringParameterAccessor); this.numericParams.Add(paramName, numericParameterAccessor); } catch (ArgumentException argumentException1) { ArgumentException argumentException = argumentException1; throw new MeasurementEventException(string.Concat("Measurement event class ", getter.DeclaringType.FullName, " declares more than one parameter named ", paramName), argumentException); } }
public static DoubleConverter.Conversion <TInput> GetConversion <TInput>() { Delegate fromBoolean; Type type = typeof(TInput); if (type.IsEnum) { return(DoubleConverter.GetEnumConversion <TInput>()); } switch (Type.GetTypeCode(type)) { case TypeCode.Boolean: { fromBoolean = DoubleConverter.FromBoolean; break; } case TypeCode.Char: { fromBoolean = DoubleConverter.FromChar; break; } case TypeCode.SByte: { fromBoolean = DoubleConverter.FromSByte; break; } case TypeCode.Byte: { fromBoolean = DoubleConverter.FromByte; break; } case TypeCode.Int16: { fromBoolean = DoubleConverter.FromInt16; break; } case TypeCode.UInt16: { fromBoolean = DoubleConverter.FromUInt16; break; } case TypeCode.Int32: { fromBoolean = DoubleConverter.FromInt32; break; } case TypeCode.UInt32: { fromBoolean = DoubleConverter.FromUInt32; break; } case TypeCode.Int64: { fromBoolean = DoubleConverter.FromInt64; break; } case TypeCode.UInt64: { fromBoolean = DoubleConverter.FromUInt64; break; } case TypeCode.Single: { fromBoolean = DoubleConverter.FromSingle; break; } case TypeCode.Double: { fromBoolean = DoubleConverter.FromDouble; break; } case TypeCode.Decimal: { fromBoolean = DoubleConverter.FromDecimal; break; } case TypeCode.DateTime: { fromBoolean = DoubleConverter.FromDateTime; break; } default: { if (typeof(TimeSpan) != type) { fromBoolean = new DoubleConverter.Conversion <TInput>((TInput val) => DoubleConverter.FromObject(val)); break; } else { fromBoolean = DoubleConverter.FromTimeSpan; break; } } } return(fromBoolean as DoubleConverter.Conversion <TInput>); }