using System.Collections.Generic;
using System.Security.Cryptography;
public static void Main()
Console.WriteLine(x.CompareObject(x2, v => v.A, v => v.B, v => v.C));
Console.WriteLine(x.CompareObject(x2, v => v.C, v => v.B, v => v.A));
public static class Extensions
public static int CompareObject<T>(this T left, T right, params Func<T, IComparable>[] comparables)
return comparables.Select(v => v(left).CompareTo(v(right))).SkipWhile(v => v == 0).FirstOrDefault();