What would be a practical advantage of using generics vs interfaces in this case:
void MyMethod(IFoo f) 
{
}
void MyMethod(T f) : where T : IFoo
{
         
         
IFoo is a value type, the non-generic version will box the value of the parameter, and boxing can negatively affect performance (especially if you call this method very often)T rather than a IFoo, which is convenient if you need to call a method of T on the result