I have a utility method to do that which is quite efficient and re-usable!
It only iterates over collection once (n complexity).
public static TItem GetMinItem<TItem>(this IEnumerable<TItem> items) where TItem : IComparable<TItem>
{
TItem minItem = default(TItem);
bool isFirstItem = true;
foreach (var item in items)
{
if (isFirstItem)
{
minItem = item;
isFirstItem = false;
}
else
{
if (item.CompareTo(minItem) < 0)
{
minItem = item;
}
}
}
return minItem;
}
In order to be generic, the method needs TItem to be implementing IComparable. In your case, your Item class could implement like below:
public class Item : IComparable<Item>
{
public string Name { get; set; }
public double Value { get; set; }
public int CompareTo(Item other)
{
return this.Value.CompareTo(other.Value);
}
}