【发布时间】:2018-02-27 07:00:20
【问题描述】:
我一直在尝试制作一种灵活的方法,它将用不同的派生对象填充单个集合。我希望此方法还可以基于类型集合扩展其功能。问题是,为了让它看起来超级棒,我需要用一个类型替换一个显式的强制转换类名。我读到 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有什么用 -
第二个 for 循环是为每种可用类型创建一定数量的实例。在这种情况下,每个 5 个!
标签: c# refactoring