does someone understand why having a generic where constraint as class is different than interface? This code does not compile:
public interface IInterface
{
}
public class Class<T> where T : IInterface
{
public void Do()
{
IEnumerable<IInterface> ret = GetEnumerable();
}
public IEnumerable<T> GetEnumerable()
{
return new T[0];
}
}
whereas, by changing IInterface to class, suddenly compiles
public class IInterface
{
}
public class Class<T> where T : IInterface
{
public void Do()
{
IEnumerable<IInterface> ret = GetEnumerable();
}
public IEnumerable<T> GetEnumerable()
{
return new T[0];
}
}
I know that I can use:
IEnumerable<IInterface> ret = (IEnumerable<IInterface>)GetEnumerable();
but I really would like to know the reason why is the cast necessary if IInterface is interface.
