C# (коллекция) словарь с типом в качестве ключа - PullRequest
0 голосов
/ 22 апреля 2020

Я хочу создать коллекцию реестра, в которой я мог бы сохранить некоторые классы, управляемые данными, и легко их извлечь. Первой мыслью было сохранить их с указанным c идентификатором, но другим способом было сохранить их тип, чтобы я мог получить их напрямую с помощью приведения.

public class RegistryCollection<T> : Dictionary<Type, T> , IRegistryCollection where T : class {

    public void Register<A>(T entry) {
        this[typeof(A)] = entry;
    }

    public void Register(T entry) {
        this[typeof(T)] = entry;
    }

    public A Get<A>() where A : class {
        return this[typeof(A)] as A;
    }
}
public interface IRegistryCollection {
    T Get<T>() where T : class ;
}

public interface IRegistryCollection<T> : IRegistryCollection { }

Небольшой пример :

RegistryCollection<Item> itemsRegistry = new RegistryCollection<Item>();

itemsRegistry.Register<ItemChildExample>(new ItemChildExample());
itemsRegistry.Register(new ItemSecondExample());

ItemSecondExample item = itemsRegistry.Get<ItemSecondExample>();

Хочу узнать ваше мнение, так как Кастинг не всегда лучший выбор, и если они уже были в какой-то коллекции, то это делает.

Спасибо.

++

abstract class Item {

}

class ItemChildExample : Item { }

class ItemSecondExample : Item { }
...