T is a Type and in your case T should be a defined class or struct that implements IComparable. But it is important to remember that T is just defining the requirement at time of writing your code, meaning it is about a class and not about an object instance.
The call to GetProperties() works fine but you do not have an instance. So whatever properties T would have, from which object would you expect the values? You need an instance for that. In your code you assign typeof(T) to obj, but typeof(T) gives you the Type and not an instance of T. The GetProperties on the next line is a method of Type and not of T. If you want your test code working using an instance of T try the following:
public class TableManagerOf<T> where T : IComparable, new()
{
void test()
{
var obj = new T();
m_Properties = typeof(T).GetProperties();
foreach (var item in m_Properties)
{
var value = item.GetValue(obj);
}
}
}
The additional new() is to make sure T is a class with a default constructor, so a new instance can be created using a parameterless constructor new T() .
Good luck!