Как поменять значения экземпляров класса друг с другом C#

Использую метод для замены значений экземпляров класса друг с другом вот так

void Change(ref Array_member V1, ref Array_member V2) 
        {
            Array_member V;
            V = V1;
            V1 = V2;
            V2 = V;             
        }

Но это работает не так как я хочу. Я сам толком разобраться не могу, но кажется что значения индексатора меняются, а значения полей и свойств нет. Вот код класса

 class Array_member
    {
        internal int Index { get; set; }
        internal int Value { get; set; }
        internal int GrHeigth { get; set; }
        internal int x { get; set; }       
        static internal int GrWidth, YCoef;
        internal SolidBrush brush;
        
        internal static Array_member[] members = new Array_member[10];
        public Array_member this[int index]
        {
            get {                
                return members[index]; 
            }
            set { members[index] = value; }
        }

        public static Bitmap bmap = new Bitmap(800,500);
        public static Graphics display = Graphics.FromImage(bmap);
        internal void DrawMember()
        {            
            GrHeigth = YCoef * Value;
            display.FillRectangle(brush, x, GrHeigth, GrWidth, 500);
        }

        public static bool operator <(Array_member a1, Array_member a2)
        {
            return a1.Value < a2.Value;
        }

        public static bool operator >(Array_member a1, Array_member a2)
        {
            return a1.Value > a2.Value;
        }
    }

Ответы (1 шт):

Автор решения: return
public static void Swap<T>(ref T a, ref T b)
{
    var tmp = a;
    a = b;
    b = tmp;
}
for (int i = 1; i < Array_member.members.Length; i++)
{
    if (Array_member.members[i] < Array_member.members[i - 1])
    {
        Swap(ref Array_member.members[i].Index, ref Array_member.members[i - 1]);
        Swap(ref Array_member.members[i], ref Array_member.members[i - 1]);
    }
} 
→ Ссылка