You get the compiler error because you have a property getter (get) and a setter (set). The property getter has the T in it's output so out works, but the property setter will have the T in its input so it would need the in modifier.
Because you have out on T you need to remove the setter and it will compile:
public interface IItem where T : IFoo
{
// IEnumerable> GetList(); // works
IEnumerable> ItemList { get; } // also works
}
If your T is an in generic argument then the following would work:
public interface IItem where T : IFoo
{
IEnumerable> ItemList { set; }
}
But you cannot have both (out,in) at the same time so you cannot have a co/contravariant property with a getter and a setter.