I'm creating a generic method which should be able to return null.
As an example I've created this method GetSecondSmallest(List<T>) below. This function loops through all of the IComparable items and returns the second smallest item if possible. If this item does not exist it returns null.
public T? GetSecondSmallest<T>(List<T> items) where T : Nullable, IComparable
{
if (items.Count == 0) return null;
T smallest = items[0];
T? secondSmallest = null;
// Find second smallest by looping through list
return secondSmallest;
}
Two example usages of this method would be:
GetSecondSmallest(new List<int> {4, 2, 3, 1, 6, 8}) // Should return 2
GetSecondSmallest(new List<MyComparable> {new MyComparable('x')}) // Should return null
When you try to compile this code you'll see what the problem is here:
Error CS0717 'Nullable': static classes cannot be used as constraints
How can I make this method return either an instance of T or null?
EDIT: I have already seen this question, but this does not answer my question, because in my situation the parameter is also generic, and should be Nullable. So the provided answers there aren't applicable.