I have created a generic class, with the constraint IComparable, as follows:
Public Class Foo(Of T As IComparable)
Private _f As T
Public Sub New(ByVal f As T)
_f = f
End Sub
Public Function GetBar() As Bar
Return New Bar(Me) 'compiler error: Value of type Foo(of T)
'cannot be converted to Foo(of IComparable)
End Function
End Class
I have another class which takes as a constructor argument an object of the first class defined:
Public Class Bar
Private _foo As Foo(Of IComparable)
Public Sub New(ByVal foo As Foo(Of IComparable))
_foo = foo
End Sub
End Class
However, I get the shown error when trying to create the Bar object.
Can anybody explain why am I getting this error? I would expect the compiler to know that type T is any IComparable type...
I have found a similar question here, but I don't know how to use it in my case.

I would expect the compiler to know that type T is any IComparable type...
Yes, it knows that - but your Bar constructor is expecting a Foo(Of IComparable) not a Foo(Of T) where T implements IComparable. You want generic covariance, but that can't be applied to classes in .NET (only interfaces and delegates).
One option is to make Bar generic as well, with another type parameter T which is constrained to implement IComparable. Then your Foo.GetBar() method could return a Bar(Of T).
See more on this question at Stackoverflow