首页 > 解决方案 > 使用未声明的泛型来强制区分类型

问题描述

我目前正在尝试创建一个民意调查/调查程序,并且我正在尝试使用泛型来保持灵活性。在我的实现中,我尝试IPollQuestion<TAnswer>使用链接将问题链接在一起IPollQuestionLink<TPreviousAnswer, TNextAnswer>,以显示从一个问题到另一个问题的可能流程。

文本示例可以是:

  1. 您是否已满 18 岁?(TAnswer = 布尔值)
  2. 你喝酒吗?(TAnswer = 布尔值)
  3. 你每周喝多少酒精饮料?(TAnswer = int)

在这种情况下,Q1 和 Q2 之间的链接应该是TPreviousAnswer is boolandTNextAnswer is bool而 Q2 和 Q3 之间的链接应该是TPreviousAnswer is booland TNextAnswer is int

问题之间的联系看起来很简单:

public interface IPollQuestionLink<TPreviousAnswer, TNextAnswer>
{
    IPollQuestion<TPreviousAnswer> PreviousQuestion { get; set; }
    IPollQuestion<TNextAnswer> NextQuestion { get; set; }
    Func<TPreviousAnswer, bool> Check { get; set; } // Check if NextQuestion should be asked
}

但是当我编写问题界面本身时,我会卡在指定TAnswer问题的类型可以不同于后续问题的答案类型,就像上面文本示例中 Q2 和 Q3 之间的链接一样。

public interface IPollQuestion<TAnswer>
{
    TAnswer Answer { get; set; }
    IEnumerable<IPollQuestionLink<TAnswer, /* Causes problems */>> NextQuestionLinks { get; set; }
}

有什么办法可以解决这个问题,还是我必须使用不同的策略来创建这个投票系统?

标签: c#generics.net-core.net-5

解决方案


推荐阅读