ASP.net相当于Rails的“周期”?

时间:2009-05-11 05:09:46

标签: asp.net ruby-on-rails

从Rails转到ASP.net非常痛苦。但我想知道是否有任何大师知道从Rails for ASP.net等效翻译“循环”?

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#M001721

基本上能够根据被调用的第n个时间有条件地输出第n个参数。

非常感谢!

2 个答案:

答案 0 :(得分:0)

没有内置功能可以实现这一点 - 您必须自己编写代码。你可以使用modulo完成同样的事情,但你必须使用for循环(或某种索引):

var colors = new List {“Red”,“Green”,“Blue”};

for (int i=0; i < rows.length; i++) {
    out.write("<p class='" + colours[i % colours.Count] + "'>" + rows[i].Name + "</p>");
}

现在,我相信你会同意这比那些愚蠢的Ruby东西更优雅; - )

答案 1 :(得分:0)

您可以使用yield keyword滚动自己。这些东西会给你类似的功能。您需要包含此命名空间以使用IEnumerable接口:

using System.Collections;

以下是一个例子:

public static void Main()
{
    string[] myColors = { "red", "green", "blue" };
    // this would be your external loop, such as the one building up the table in the RoR example
    for (int index = 0; index < 3; index++)
    {
        foreach (string color in Cycle(myColors))
        {
            Console.WriteLine("Current color: {0}", color);
        }
    }
}

public static IEnumerable Cycle<T>(T[] items)
{
    foreach (T item in items)
    {
        yield return item;
    }
}

Cycle方法在上面的代码示例中使用generics以允许使用其他类型。例如,声明myColors的地方可以使用:

int[] myInts = { 0, 1, 2, 3 };
bool[] myBools = { true, false };

在循环中你可以:

foreach (int i in Cycle(myInts))
{
    Console.WriteLine("Current int: {0}", i);
}
foreach (bool b in Cycle(myBools))
{
    Console.WriteLine("Current bool: {0}", b);
}