Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ MaxBy< TSource, TKey >() [2/2]

static ? TSource System.Linq.Enumerable.MaxBy< TSource, TKey > ( this IEnumerable< TSource > source,
Func< TSource, TKey > keySelector,
IComparer< TKey >? comparer )
inlinestatic

Definition at line 5799 of file Enumerable.cs.

5800 {
5801 if (source == null)
5802 {
5803 ThrowHelper.ThrowArgumentNullException(ExceptionArgument.source);
5804 }
5805 if (keySelector == null)
5806 {
5807 ThrowHelper.ThrowArgumentNullException(ExceptionArgument.keySelector);
5808 }
5809 if (comparer == null)
5810 {
5811 comparer = Comparer<TKey>.Default;
5812 }
5813 using IEnumerator<TSource> enumerator = source.GetEnumerator();
5814 if (!enumerator.MoveNext())
5815 {
5816 if (default(TSource) == null)
5817 {
5818 return default(TSource);
5819 }
5820 ThrowHelper.ThrowNoElementsException();
5821 }
5822 TSource val = enumerator.Current;
5823 TKey val2 = keySelector(val);
5824 if (default(TKey) == null)
5825 {
5826 while (val2 == null)
5827 {
5828 if (!enumerator.MoveNext())
5829 {
5830 return val;
5831 }
5832 val = enumerator.Current;
5833 val2 = keySelector(val);
5834 }
5835 while (enumerator.MoveNext())
5836 {
5837 TSource current = enumerator.Current;
5838 TKey val3 = keySelector(current);
5839 if (val3 != null && comparer.Compare(val3, val2) > 0)
5840 {
5841 val2 = val3;
5842 val = current;
5843 }
5844 }
5845 }
5846 else if (comparer == Comparer<TKey>.Default)
5847 {
5848 while (enumerator.MoveNext())
5849 {
5850 TSource current2 = enumerator.Current;
5851 TKey val4 = keySelector(current2);
5852 if (Comparer<TKey>.Default.Compare(val4, val2) > 0)
5853 {
5854 val2 = val4;
5855 val = current2;
5856 }
5857 }
5858 }
5859 else
5860 {
5861 while (enumerator.MoveNext())
5862 {
5863 TSource current3 = enumerator.Current;
5864 TKey val5 = keySelector(current3);
5865 if (comparer.Compare(val5, val2) > 0)
5866 {
5867 val2 = val5;
5868 val = current3;
5869 }
5870 }
5871 }
5872 return val;
5873 }

References System.comparer, System.Linq.Default, System.Collections.Generic.Dictionary< TKey, TValue >.GetEnumerator(), System.Linq.keySelector, System.Linq.source, System.Linq.ThrowHelper.ThrowArgumentNullException(), and System.Linq.ThrowHelper.ThrowNoElementsException().