我一直在尝试制作一个灵活的方法,它将使用不同的派生对象填充单个集合。我希望这种方法还可以根据类型集合扩展其功能。问题是,为了看起来超级,我需要用类型替换显式的强制转换类名。我读到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);
}
}
}
答案 0 :(得分:1)
由于它们都来自even2
,你可以用
Goal forall n, Nat.even (n * (S n)) = true.
intros n.
now rewrite even_equiv_even2, even2_distr_mult, orb_negb_r.
Qed.