16

我想在 asp.net mvc2 中创建序列号 ..

那么数字应该从 开始{ 0 to 1000}。我试过如下,

 var seq = Enumerable.Range(1, 1000);
        ViewData["OrderNo"] = seq;

鉴于:

 <%:Html.Hidden("OrderNo") %>
            <%:ViewData["OrderNo"] %>  

我的结果是

System.Linq.Enumerable+<RangeIterator>d__b8

但是当获得价值时它不起作用......如何生成序列号?

4

2 回答 2

35

如果你想枚举一个数字序列(IEnumerable<int>0到一个变量end,然后尝试

Enumerable.Range(0, ++end);

在解释中,要获得从 0 到 1000 的数字序列,您希望序列从 0 开始(请记住,在 0 和 1000 之间,包括 1001 个数字)。


如果你想要一个无限的线性系列,你可以写一个像

IEnumerable<int> Series(int k = 0, int n = 1, int c = 1)
{
    while (true)
    {
        yield return k;
        k = (c * k) + n;
    }
}

你可以像这样使用

var ZeroTo1000 = Series().Take(1001);

如果你想要一个函数,你可以重复调用来生成递增的数字,也许你想要类似的东西。

using System.Threading;

private static int orderNumber = 0;

int Seq()
{
    return Interlocked.Increment(ref orderNumber);
}

当您调用Seq()它时,它将返回下一个订单号并增加计数器。

于 2013-11-13T09:21:11.817 回答
8

目前尚不清楚您的意思或您认为失败的原因,但Enumerable.Range的参数是startand count,而不是startand end

如果要生成从 0 开始到 1000 结束的数字,则必须编写:

Enumerable.Range(0,1001);

如果您有不同的问题(例如,序列在用户调用之间或从用户到用户或其他任何情况下不存在),您将必须具体。

也许你的意思是你存储在 ViewData 中的 IEnumerable 没有像你期望的那样在 View 中持久化?这是因为 Range 返回一个实现 IEnumerable 并使用延迟执行来生成请求值的对象。除非您使用 a 或 ToArray() 强制枚举,否则for根本不会生成数字。将对象存储在某处不会强制进行枚举。

于 2013-11-13T09:25:47.683 回答