protected Array _ChangeTypeOfArray(Array arrayVar, Type dtype) { Array newValues = null; switch (Type.GetTypeCode(dtype)) { case TypeCode.Double: { newValues = new double[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ToDouble(arrayVar.GetValue(idx)), idx); } break; } case TypeCode.Single: { newValues = new float[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ToSingle(arrayVar.GetValue(idx)), idx); } break; } case TypeCode.Decimal: { newValues = new Decimal[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ToDecimal(arrayVar.GetValue(idx)), idx); } break; } case TypeCode.Int32: { newValues = new int[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ToInt32(arrayVar.GetValue(idx)), idx); } break; } case TypeCode.Int64: { newValues = new Int64[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ToInt64(arrayVar.GetValue(idx)), idx); } break; } case TypeCode.Object: { if (dtype == typeof(System.Numerics.Complex)) { newValues = new System.Numerics.Complex[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(new System.Numerics.Complex((double)arrayVar.GetValue(idx), 0), idx); } break; } else if (dtype == typeof(System.Numerics.Quaternion)) { newValues = new System.Numerics.Quaternion[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(new System.Numerics.Quaternion(new System.Numerics.Vector3(0, 0, 0), (float)arrayVar.GetValue(idx)), idx); } break; } else { newValues = new object[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(arrayVar.GetValue(idx), idx); } break; } } default: { break; } } return(newValues); }
protected Array _ChangeTypeOfArray(Array arrayVar, Type dtype) { if (dtype == arrayVar.GetType().GetElementType()) { return(arrayVar); } _DType = dtype; Array newValues = null; switch (Type.GetTypeCode(dtype)) { case TypeCode.Double: { newValues = new double[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ToDouble(arrayVar.GetValue(idx)), idx); } break; } case TypeCode.Single: { newValues = new float[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ToSingle(arrayVar.GetValue(idx)), idx); } break; } case TypeCode.Decimal: { newValues = new Decimal[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ToDecimal(arrayVar.GetValue(idx)), idx); } break; } case TypeCode.Int32: { newValues = new int[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ToInt32(arrayVar.GetValue(idx)), idx); } break; } case TypeCode.UInt32: { newValues = new uint[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ToUInt32(arrayVar.GetValue(idx)), idx); } break; } case TypeCode.Int64: { newValues = new long[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ToInt64(arrayVar.GetValue(idx)), idx); } break; } case TypeCode.UInt64: { newValues = new ulong[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ToUInt64(arrayVar.GetValue(idx)), idx); } break; } case TypeCode.Int16: { newValues = new short[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ToInt16(arrayVar.GetValue(idx)), idx); } break; } case TypeCode.UInt16: { newValues = new ushort[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ToUInt16(arrayVar.GetValue(idx)), idx); } break; } case TypeCode.Byte: { newValues = new byte[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ToByte(arrayVar.GetValue(idx)), idx); } break; } case TypeCode.SByte: { newValues = new sbyte[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ToSByte(arrayVar.GetValue(idx)), idx); } break; } default: if (dtype == typeof(System.Numerics.Complex)) { newValues = new System.Numerics.Complex[arrayVar.Length]; for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(new System.Numerics.Complex((double)arrayVar.GetValue(idx), 0), idx); } break; } /*else if ( dtype == typeof(System.Numerics.Quaternion) ) * { * newValues = new System.Numerics.Quaternion[arrayVar.Length]; * for(int idx = 0;idx < arrayVar.Length;idx++) * newValues.SetValue(new System.Numerics.Quaternion(new System.Numerics.Vector3(0,0,0) , (float)arrayVar.GetValue(idx)),idx); * break; * }*/ //fallback newValues = Array.CreateInstance(dtype, arrayVar.Length); for (int idx = 0; idx < arrayVar.Length; idx++) { newValues.SetValue(Convert.ChangeType(arrayVar.GetValue(idx), dtype), idx); } break; } return(newValues); }