У меня есть несколько различных списков объектов, т.е.списков, которые реализуют интерфейс, и передать ссылку на этот список
List<Character> characters;
// ...
и некоторые из этих списков являются объекты, которые реализуют один и тот же интерфейс:
public interface IDebugPrints
// ...
public class Character : IDebugPrints
// ...
у меня есть класс, где я хотел бы сохранить ссылку на список (переданного ему в конструкторе), который реализует IDebugPrints, т.е.
List<IDebugPrints> inList
Так что позже я могу выполнить итерацию по этому списку (в этом случае распечатать отладочную информацию о текущих записях в первоначальном списке).
Не могу понять, как это сделать. Если я передаю List как IEnumerable, он делает копию исходного списка, который доцент работает для меня, так как объекты добавляются и удаляются из исходного списка после этой копии.
Любая помощь приветствуется. У меня такое чувство, что это невозможно по нескольким другим вопросам здесь, но это было бы приятно.
EDIT:
Вот немного больше псевдо-код:
public interface IDebugPrints
// ...
public class Character : IDebugPrints
// ...
public class StoreList
{
private List<IDebugPrints> internalList;
public StoreList(List<IDebugPrints> inList)
{
internalList = inList;
}
}
// The I have the various lists, for example
List<Character> characters;
// ...
// And I want to pass that list
StoreList sl = new StoreList(characters);
Последняя строка дает ошибки компиляции:
Cannot convert from System.Collections.Generic.List<Character> to Systems.Collections.Generic.List<IDebugPrints>
Пропустите список как List. Почему это не работает? Кроме того, даже если он передан как IE , копия не будет выполнена. В .NET никогда не существует неявной копии объекта ссылочного типа. –
usr
Не могли бы вы предоставить больше кода и объяснить, что именно ваша проблема? –
Несомненно, отредактировал оригинальный пост с более подробной информацией. Конкретная проблема: я работаю над игрой с различными списками объектов. Я бы хотел, чтобы общий способ сбросить содержимое этих списков на консоль отладки с помощью команды консоли. Поэтому у меня есть классы, которые я хочу сбрасывать с помощью IDebugPrints. А затем класс, который выполняет итерацию над списком и вызывает метод из IDebugPrints. –