public int Compare(T x, T y) { var comparers = ComparerFactory.GetComparers <T>(); foreach (var comparer in comparers) { var comparisionResult = comparer.Compare(x, y); if (comparisionResult.FoundResult) { return(comparisionResult.Result); } } return(ComparerFactory.GetDefaultComparer <T>().Compare(x, y)); }