If you need to retrieve the maximum value frequently you might think about creating your own list class (or derive from List) which keeps the maximum item in a cache. Such a class could look like this:
public class MaxList<T> : IList<T>, ICollection<T>, IEnumerable<T>
{
T Maximum { get; set; }
List<T> _list;
public T this[int index] { get; set; }
public void Add(T item)
{
if (item > this.Maximum)
{
this.Maximum = item;
}
_list.Add(item);
}
// ... IEnumerable<T>, ICollection<T> and IList<T> members
}
Alternatively, you could derive from List directly and overwrite the Add and Remove methods (basically all methods modifying list items) and update the cache accordingly.
If such an approach is really a benefit depends on your scenario. IT definitely is if you have a very large list with is rarely updated and you need to retrieve the maximum frequently. Otherwise go for the solutions already suggested because they are much simpler.