我想在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
但是当在视图中获取值时它无法正常工作......如何生成序列号?
答案 0 :(得分:23)
如果您要枚举从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()
时,它将返回下一个订单号并递增计数器。
答案 1 :(得分:3)
目前尚不清楚您的意思或您认为失败的原因,但Enumerable.Range的参数为start
和count
,而不是start
和end
。
如果要生成从0开始并以1000结尾的数字,则必须写:
Enumerable.Range(0,1001);
如果您有其他问题(例如,序列不会在用户呼叫之间,或者从用户到用户之间或其他任何阶段持续存在),则必须具体。
也许你的意思是你在ViewData中存储的IEnumerable没有像你在View中预期的那样持久化?这是因为Range返回一个实现IEnumerable的对象,并使用延迟执行来生成请求的值。除非使用for
或ToArray()强制枚举,否则根本不会生成数字。将对象存储在某处不会强制枚举。