从Rails转到ASP.net非常痛苦。但我想知道是否有任何大师知道从Rails for ASP.net等效翻译“循环”?
http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#M001721
基本上能够根据被调用的第n个时间有条件地输出第n个参数。
非常感谢!
答案 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);
}