2013-11-03 29 views
0

函数N次,结果存储在数组中,我想在lambda-Y的方式来调用函数的N倍,结果存储在一个阵列(或结果附加到一个列表)。我会怎么做?呼叫使用兰巴

我已经试过Enumerable.Repeat(fun(), n).ToArray();这将是理想的,但有趣的()只调用一次。

+0

您需要添加更多详细信息。什么类型的对象 - 细节男人! – OneFineDay

+0

引用lambda中的数组或列表,可能是捕获的变量。 – SJuan76

+0

@DonA - 可以说有一个没有参数的函数,返回一个int。看来我应该可以使用Enumerator.Repeat,但我现在很累。 –

回答

2

n次调用一个随机函数并保留所有结果。

IEnumerable<T> CallRepeatedly<T>(Func<T> a, int count) 
{ 
    for(int i=0; i<count; i++) 
    { 
     yield return a(); 
    } 
    yield break; 
} 

是这样的,你在找什么?我不确定Func会在每次调用中返回不同结果的条件,但您可以轻松地重构将索引作为参数。

+0

我没有想到这样的事情,野! –

+1

+1基本解释BrokenGlass的解决方案是如何工作的。我会使用'Enumerable.Range'版本,因为它具有相同的行为,但出错的可能性较小。注意:函数结束时不需要“yield break”,这是隐含的。 –

+0

如果将它添加到像'public static class Enumerable {...}这样的小类中,就像您想要的方法不会丢失一样。 –

2

我们假设你的函数有一个整型参数,那么像这样的工作(否则有你所需要的参数代替):

int n = 10; 
var results = Enumerable.Range(0, n) 
         .Select(myFunction) 
         .ToArray(); 

在这个例子中myFunction会有什么Func<int, T>其中T是你的回报类型。