很抱歉提出这样一个模糊的问题,我是新手使用C#/ ASP.NET.当创建随机生成的问题,并通过使用for循环将问题对象存储在列表中时,在输出问题时会出现相同/重复的问题.我用调试器检查了问题列表,它显示了10个相同的对象.
服务器端C#用于填充问题列表:
private void Populate()
{
__NumberOfQuestions = 10;
__Questions = new List<Question>(__NumberOfQuestions);
for (int i = 0; i < __NumberOfQuestions; i++)
{
__Questions.Add(new Question());
}
QuestionList.DataSource = __Questions;
QuestionList.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
问题类可以在这里找到:http: //pastebin.com/mEArQFHh
ASP代码用于将问题添加到页面:
<asp:Repeater ID="QuestionList" runat="server">
<ItemTemplate>
<tr>
<td><%#DataBinder.Eval(Container.DataItem,"__LeftOperand")%></td>
<td><%#DataBinder.Eval(Container.DataItem,"__Operator")%></td>
<td><%#DataBinder.Eval(Container.DataItem,"__RightOperand")%></td>
<td><%#DataBinder.Eval(Container.DataItem,"__Answer")%></td>
</tr>
</ItemTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)
输出:
9减法6 3 9减法6 3 9减法6 3 9减法6 3 9减法6 3 9减法6 3 9减法6 3 9减法6 3 9减法6 3 9减法6 3
你做错了什么:
Random为每个创建一个新对象Question.Random构造函数提供参数,因此使用默认的基于时间的种子.这使用Environment.TickCount(虽然我不认为这是专门记录的),因此它具有毫秒级的粒度.解决这个问题的最简单方法是制作你的Random对象static,这意味着它由所有Question对象共享- 或者属于Question类,而不是问题实例.这意味着它只会被构造一次,你将得到一个合理的随机数序列.