ASP.net эквивалент «цикла» из Rails? - PullRequest
0 голосов
/ 11 мая 2009

Переход с Rails на ASP.net был довольно болезненным. Но мне было интересно, знает ли какой-нибудь гуру эквивалентный перевод «цикла» из Rails для ASP.net?

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

По сути, чтобы иметь возможность выводить n-й параметр в зависимости от n-го его вызова.

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 12 мая 2009

Вы можете свернуть свои собственные, используя ключевое слово yield . Вот кое-что, что даст вам похожую функциональность. Вам нужно будет включить это пространство имен, чтобы использовать интерфейс 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);
}
0 голосов
/ 11 мая 2009

Для этого нет встроенной функции - вам придется кодировать ее самостоятельно. Вы можете сделать то же самое, используя модуль, но вам придется использовать цикл 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>");
}

Теперь, я уверен, вы согласитесь, что это намного более элегантно, чем глупая рубиновая штука; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...