Что делать, если вы получили доступ к вашему объекту MyData через интерфейс ISomeData? В этом случае IEnumerable может быть базового типа, не назначаемого List.
IEnumerable<string> iss = null;
List<string> ss = iss; //compiler error
EDIT:
Я понимаю, что вы имеете в виду из своих комментариев.
Во всяком случае, я бы сделал в вашем случае:
public interface ISomeData<T> where T: IEnumerable<string>
{
T Data { get; }
}
public class MyData : ISomeData<List<string>>
{
private List<string> m_MyData = new List<string>();
public List<string> Data { get { return m_MyData; } }
}
Преобразование в общий интерфейс с соответствующими предложениями ограничений я считаю лучшим как гибкостью, так и удобочитаемостью.
, пожалуйста, посмотрите на эти хранилища . Эти настройки отличаются от ваших, но могут помочь в их создании для вашего проекта.