Синтаксис:
Используется csharp
Dictionary<Type, Dictionary<int, Base>> d = new Dictionary<Type, Dictionary<int, Base>>();
Выглядит мощно, знаю, суть не в этом. Base является базовым классом для классов A, B, C к примеру:
Синтаксис:
Используется csharp
class Base { }
class A : Base { }
class B : Base { }
class C : Base { }
class A : Base { }
class B : Base { }
class C : Base { }
Я пытаюсь сделать метод, который бы вернул словарь из d преобразованный в наследуемый тип, например Dictionary<int, A>. Но простой as не может этого сделать, а создавать новый словарь и заполнять его элементами из d слишком затратно.
Вот пример метода возврата:
Синтаксис:
Используется csharp
Dictionary<int, T> GetAllElements<T>() where T : Base
{
return d[typeof(T)] as Dictionary<int, T>;
}
{
return d[typeof(T)] as Dictionary<int, T>;
}
Но как я уже сказал так не канает, выдает NullReferenceException. Мне это нужно для прохода по циклу в другом коде, к примеру так:
Синтаксис:
Используется csharp
foreach (A a in GetAllElements<A>())
{
// bla bla bla
}
{
// bla bla bla
}
Если сделать так:
Синтаксис:
Используется csharp
Dictionary<int, Base> GetAllElements<T>() where T : Base
{
return d[typeof(T)];
}
{
return d[typeof(T)];
}
То цикл работать будет, НО! Не всегда хочется указывать тип напрямую для преобразования (лучше использовать var), но если юзануть var, то получится не тип А, а тип Base, что не комильфо...
п.с. Можно через линкью, но я не уверен в его производительности, что вы думаете на этот счет?