internal static void УстановитьИзмененияВМассиве(object[] оригинальныйМассив, object[] массивРеальныхОбъектов) { if (оригинальныйМассив == массивРеальныхОбъектов) { return; } for (int i = 0; i < оригинальныйМассив.Length; i++) { object obj = оригинальныйМассив[i]; if (obj is AutoWrap) { AutoWrap элемент = (AutoWrap)obj; if (!Equals(элемент.O, массивРеальныхОбъектов[i])) { оригинальныйМассив[i] = ОбернутьОбъект(массивРеальныхОбъектов[i]); } } else { if (!Equals(оригинальныйМассив[i], массивРеальныхОбъектов[i])) { оригинальныйМассив[i] = ОбернутьОбъект(массивРеальныхОбъектов[i]); } } } }
public int Next(int celt, object[] rgVar, IntPtr pceltFetched) { if (celt == 1 && _enumerator.MoveNext()) { rgVar[0] = AutoWrap.ОбернутьОбъект(_enumerator.Current); if (pceltFetched != IntPtr.Zero) { Marshal.WriteInt32(pceltFetched, 1); } return(SOk); } return(SFalse); }
public static object ОбернутьОбъект(object obj) { if (obj != null) { Type Тип = obj.GetType(); if (Тип == typeof(IntPtr) || Тип == typeof(UIntPtr)) { return(new AutoWrap(obj)); } if (Тип == typeof(Char)) { return(Convert.ToString(((char)obj))); } if (ЭтоСемерка) { if (Тип == typeof(Decimal)) { return(((Decimal)obj).ToString(CultureInfo.InvariantCulture)); } if (Тип.IsPrimitive) { if ((Тип == typeof(Int64) || Тип == typeof(UInt32) || Тип == typeof(UInt64) || Тип == typeof(UInt16) || Тип == typeof(SByte))) { obj = Convert.ChangeType(obj, typeof(string), CultureInfo.InvariantCulture); } } else if (!(Тип == typeof(DateTime) || Тип == typeof(String) || Тип == typeof(Decimal) || Тип.IsCOMObject) ) { obj = new AutoWrap(obj); } } else { if (Тип.IsArray) { Type ТипМассива = Тип.GetElementType(); if (ТипМассива != null) { Тип = ТипМассива; } } if (!(Тип.IsPrimitive || Тип == typeof(Decimal) || Тип == typeof(DateTime) || Тип == typeof(String) || Тип.IsCOMObject) ) { obj = new AutoWrap(obj); } } } return(obj); }