public static ToWoopsaValue ( object value, WoopsaValueType type, System.DateTime timeStamp = null ) : |
||
value | object | |
type | WoopsaValueType | |
timeStamp | System.DateTime | |
리턴 |
public static WoopsaValue ToWoopsaValue(object value, WoopsaValueType type, DateTime? timeStamp = null)
{
try
{
switch (type)
{
case WoopsaValueType.Logical:
return new WoopsaValue((bool)value, timeStamp);
case WoopsaValueType.Integer:
return new WoopsaValue(Convert.ToInt64(value), timeStamp);
case WoopsaValueType.Real:
return new WoopsaValue(Convert.ToDouble(value), timeStamp);
case WoopsaValueType.DateTime:
return new WoopsaValue((DateTime)value, timeStamp);
case WoopsaValueType.TimeSpan:
if (value is TimeSpan)
return new WoopsaValue((TimeSpan)value, timeStamp);
else
return new WoopsaValue(TimeSpan.FromSeconds(Convert.ToDouble(value)),
timeStamp);
case WoopsaValueType.Text:
if (string.IsNullOrEmpty((string)value))
return new WoopsaValue(string.Empty, timeStamp);
else
return new WoopsaValue(WoopsaFormat.ToStringWoopsa(value), timeStamp);
default:
return WoopsaValue.CreateUnchecked(WoopsaFormat.ToStringWoopsa(value), type, timeStamp);
}
}
catch (InvalidCastException)
{
throw new WoopsaException(String.Format("Cannot typecast object of type {0} to Woopsa Type {1}", value.GetType(), type.ToString()));
}
}
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { result = null; foreach (var method in InnerObject.Methods) { if (method.Name.Equals(binder.Name)) { var argumentInfos = method.ArgumentInfos.ToArray(); var arguments = new IWoopsaValue[argumentInfos.Length]; for (int i = 0; i < argumentInfos.Length; i++) { WoopsaValueType woopsaValueType; WoopsaConverter woopsaConverter; if (CustomTypeConverters != null) { CustomTypeConverters.InferWoopsaType(args[i].GetType(), out woopsaValueType, out woopsaConverter); arguments[i] = woopsaConverter.ToWoopsaValue(args[i], woopsaValueType, null); } else { arguments[i] = WoopsaValue.ToWoopsaValue(args[i], argumentInfos[i].Type); } } result = method.Invoke(arguments); return(true); } } return(false); }