У меня есть класс, которые реализуют интерфейс:Reference преобразование между классом и его интерфейсом
public interface IMyInterface
{
string MY_VALUE { get; set; }
}
public class MyClass: IMyInterface
{
public string MY_VALUE { get; set; }
}
Я использую класс в списке:
private List<MyClass> MyInternal;
public List<IMyInterface> MyExternal
{
get
{
return MyInternal;
}
}
Проблема здесь состоит в том, что MyInternal имеет введите MyClass, чтобы функция get имела ошибку.
Однако, если я бросаю MyInternal к IMyInterface первого, было бы избавиться от ошибок, но перестанут быть полезным, потому что это новый список, а не первоначальный список:
public List<IMyInterface> MyExternal
{
get
{
return MyInternal.Select(x=>(IMyInterface)x).ToList();
}
}
Я зову внешнюю недвижимость например:
MyService.MyExternal.Add(new MyClass{ MY_VALUE:"New Value" });
Это не сработает, поскольку MyExternal не отображается в MyInternal, а в новый список. Как это сделать?
Вы действительно хотите, чтобы в списке присутствовал какой-либо объект, реализующий интерфейс, или вы хотите, чтобы у него были только экземпляры MyClass?Вы не можете иметь обоих; поэтому просто выберите один. – Servy
«Список» не ковариант. Если вы определяете 'MyExternal' как' IEnumerble ', тогда вы можете вернуть' List 'из него, поскольку' IEnumerable' не позволяет вам передавать 'IMyInterface', который не может быть' MyClass'. Но похоже, что вы просто хотите открыть «Список », если вы планируете добавить к нему. –
juharr
Но тогда я бы не смог добавить в IEnumerable – Bill