我们将在几天内进行演示,我必须进入并模拟我们的许多观点.这包括制作大量假数据等.我想我会放弃一个循环和一个返回随机数的扩展方法,所以我不必自己编写这个硬编码数据.
这是我的观看代码:
<% for(int i = 1; i < 7; i++) { %>
<tr>
<td class="auditsTableAgencyElement">Agency <%=i %></td>
<td class="auditsTableResults"><%= Html.GetRandomNumber(0, 30) %></td>
<td class="auditsTableResults"><%= Html.GetRandomNumber(0, 100) %>%</td>
<td class="auditsTableResults"><%= Html.GetRandomNumber(0, 20) %></td>
<% foreach (var record in Model.Categories) { %>
<td class="auditsTableResults"><%= Html.GetRandomNumber(0, 30) %></td>
<td class="auditsTableResults"><%= Html.GetRandomNumber(0, 100) %>%</td>
<td class="auditsTableResults"><%= Html.GetRandomNumber(0, 20) %></td>
<% } %>
</tr>
<% } %>
Run Code Online (Sandbox Code Playgroud)
这是我的观点在执行此操作后的样子:

相同的数字.我的随机数请求是否被缓存并返回给我?如果是这样,我该如何仅为此方法关闭此功能?
public static string GetRandomNumber(this HtmlHelper html, int low, int high)
{
Random myRand = new Random();
return myRand.Next(low, high).ToString();
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 10
与此类问题一样,问题是您Random在每次迭代时都在创建一个新实例.
创建单个实例并重复使用它.您可以使用静态变量,但这不是线程安全的.在这种特殊情况下,每页创建一个新实例可能没问题.但是,如果两个人同时访问该页面,您仍将获得相同的数据.
理想情况下,您可以创建以线程安全方式使用的静态随机数,以创建Random的新实例,然后可以在不锁定单个线程的情况下使用该实例.例如:
public static class RandomFactory
{
private static Random rng = new Random();
private static readonly object padlock = new object();
public static Random CreateRandom()
{
lock (padlock)
{
return new Random(rng.Next());
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的页面中,您可以:
// Instance variable
protected readonly Random rng = RandomFactory.CreateRandom();
Run Code Online (Sandbox Code Playgroud)
并将您的方法更改为:
public static string GetRandomNumber(this HtmlHelper html, Random rng,
int low, int high)
{
return rng.Next(low, high).ToString();
}
Run Code Online (Sandbox Code Playgroud)
(我不太确定你为什么会HtmlHelper在那里,说实话 - 你没有使用它......)
最后你加注到这样的事情:
<%= Html.GetRandomNumber(rng, 0, 30) %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |