Ive пытался создать гибкий метод, когда он заполнит одну коллекцию различными производными объектами. Я хочу, чтобы этот метод также расширил возможности, основанные на наборе типов. Проблема в том, что для того, чтобы выглядеть супер, мне нужно заменить явное имя класса cast типом. Я прочитал this question here, что нельзя использовать, используя имя класса, не известное во время компиляции.Чистый способ создания экземпляров различных производных классов на основе размера коллекции?
Мой вопрос к вам в том, как бы вы сделали рефакторинг этого кода, чтобы сделать его менее повторяющимся и гибким в зависимости от размера коллекции?
public struct POSSIBLE_OUTPUTS
{
public static Type MarekType { get; private set; }
public static Type HawkingType { get; private set; }
public static Type GLADOSType { get; private set; }
public static List <Type> AllOptions { get; private set; }
static POSSIBLE_OUTPUTS()
{
MarekType = typeof (MarekVoice);
HawkingType = typeof (HawkingVoice);
GLADOSType = typeof (GLADOSVoice);
AllOptions = new List <Type>();
AllOptions.Add (MarekType);
AllOptions.Add (HawkingType);
AllOptions.Add (GLADOSType);
}
}
Speeches = new List <SentenceFactory>();
for (int i = 0; i < POSSIBLE_OUTPUTS.AllOptions.Count; i++)
{
for (int k = 0; k < TOTAL_SPEECHES; k++)
{
if (POSSIBLE_OUTPUTS.AllOptions[i] == POSSIBLE_OUTPUTS.MarekType)
{
Speeches.Add (Activator.CreateInstance (POSSIBLE_OUTPUTS.AllOptions[i]) as MarekVoice);
}
else if (POSSIBLE_OUTPUTS.AllOptions[i] == POSSIBLE_OUTPUTS.HawkingType)
{
Speeches.Add (Activator.CreateInstance (POSSIBLE_OUTPUTS.AllOptions[i]) as HawkingVoice);
}
else if (POSSIBLE_OUTPUTS.AllOptions[i] == POSSIBLE_OUTPUTS.GLADOSType)
{
Speeches.Add (Activator.CreateInstance (POSSIBLE_OUTPUTS.AllOptions[i]) as GLADOSVoice);
}
}
}
Я не понимаю, что это использование 'k' –
Второй цикла создает определенный количество экземпляров на доступный тип. В этом случае по 5 штук! –