У меня проблема с использованием перечислений. Предположим, что я определил перечисление, которое имена DeviceType, которые используются внешними клиентами, определяют Устройства, которые они хотят использовать из контейнера Devices. Но поскольку перечисление не расширяется, я не могу иметь новые устройства без обновления моей библиотеки и обновления всех пользователей до новой версии. Я ищу как можно более простое решение этой проблемы. Я не хочу использовать атрибуты или любые другие «читерские» плюсы.Дизайн шаблонов для изменения перечисления?
public class Program
{
private static List<IDevice> devices;
public static void Main(String[] args)
{
devices = new List<IDevice>()
{
new NetworkDevice()
};
IEnumerable<IDevice> currentDevices = GetDevices(DeviceType.Network);
IEnumerable<IDevice> newDevices = GetDevices(DeviceType.NewNetwork); // Will not work, unless client updates my library to get newly added enum types
}
private static IEnumerable<IDevice> GetDevices(DeviceType type)
{
return devices.Where(device => device.Type == type);
}
}
public enum DeviceType
{
Network
}
public interface IDevice
{
DeviceType Type { get; }
}
public class NetworkDevice : IDevice
{
public DeviceType Type
{
get
{
return DeviceType.Network;
}
}
}
??????????????? –
может быть просто использовать 'Словарь' вместо перечисления? –
Звучит так, будто вы говорите: «Я хочу использовать перечисление, но перечисление не может делать то, что я хочу». Я предлагаю не использовать перечисление. – bengoesboom