using System; class Program { private interface ISomeType { } private class SomeType : ISomeType { } private static void DoWorkingSwap(TItem[] array) { var temp = array[0]; array[0] = array[1]; array[1] = temp; } private static void Swap(ref TItem firstItem, ref TItem secondItem) { var temp = firstItem; firstItem = secondItem; secondItem = temp; } private static void DoFaultySwap(TItem[] array) { Swap(ref array[0], ref array[1]); } private static void Main(string[] args) { // ВАЖНО: обратите внимание на тип переменной под массив и тип самого массива ISomeType[] array = new SomeType[2] { new SomeType(), new SomeType() }; Console.Write("Doing working swap... "); try { DoWorkingSwap(array); Console.WriteLine("succeeded."); } catch (Exception ex) { Console.WriteLine("FAILED: {0}", ex); } Console.Write("Doing faulty swap... "); try { DoFaultySwap(array); Console.WriteLine("succeeded."); } catch (Exception ex) { Console.WriteLine("FAILED: {0}", ex); } } }