c# - 使用未声明的泛型来强制区分类型
问题描述
我目前正在尝试创建一个民意调查/调查程序,并且我正在尝试使用泛型来保持灵活性。在我的实现中,我尝试IPollQuestion<TAnswer>
使用链接将问题链接在一起IPollQuestionLink<TPreviousAnswer, TNextAnswer>
,以显示从一个问题到另一个问题的可能流程。
文本示例可以是:
- 您是否已满 18 岁?(TAnswer = 布尔值)
- 你喝酒吗?(TAnswer = 布尔值)
- 你每周喝多少酒精饮料?(TAnswer = int)
在这种情况下,Q1 和 Q2 之间的链接应该是TPreviousAnswer is bool
andTNextAnswer is bool
而 Q2 和 Q3 之间的链接应该是TPreviousAnswer is bool
and 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; }
}
有什么办法可以解决这个问题,还是我必须使用不同的策略来创建这个投票系统?
解决方案
推荐阅读
- travis-ci - TravisCI 如何决定构建哪个站点?
- javascript - 如何使用jQuery删除伪内容后的元素
- python-2.7 - google cloud vision api,如何阅读文本并对其进行结构化
- erlang - 尝试基本的 couchdb erlang 视图
- git - 无法删除 git 中未跟踪的文件 - 文件显示没有这样的文件或目录
- java - 在Java中提取嵌套的html标签?
- php - 我可以在 WordPress 上将多个 CDN 与 WP Fastest Cache 一起使用吗?
- python - 如何将文件的所有重复行复制到 Python 中的新文件?
- clock - Labview 实现数字时钟
- javascript - 将 JQuery 添加到 Intellij