如何将整数数组传递给Razor函数?

时间:2017-08-15 10:02:37

标签: c# arrays razor

我正在编写一个函数来随机选择JSON提要中的3篇文章。我创建了一个函数,它在两个给定的端点之间生成一个随机数,并且我有一个for循环,迭代3次,将文章内容输出到页面上。

随机数功能正常运行,for循环确实将文章信息输出到页面。 randomNumber函数需要运行3次才能得到3个随机数,我需要确保一旦选择了randomNumber1,就不能再次选择它。所以我创建了一个数组(featuresStories)来存储选中的数字,但是在将它传递到我的getRandomNumber函数时遇到了麻烦。

@{
    Random rnd = new Random();
    var featuredStories = new List<int>();
}


@functions {
    public int getRandomNumber(int min, int max, Random rnd, int[] featuredStories) {

    int randomNumber = rnd.Next(min, max);

    if (featuredStories.Contains(randomNumber)){
        randomNumber = getRandomNumber(min, max, rnd);
    }else{
        featuredStories.Add(randomNumber);
    }


    return randomNumber;
}


@for(var i = 1; i < 4; i++) {

    int randomNo = getRandomNumber(1, items.Count(), rnd, featuredStories);
}

我目前收到错误:

Razor语法错误。方法'getRandomNumber'没有重载需要3个参数

2 个答案:

答案 0 :(得分:2)

您已将自己的功能定义为:

public int getRandomNumber(int min, int max, Random rnd, int[] featuredStories) {

那4个论点

但是在那个函数中,它只用3个参数调用自己:

randomNumber = getRandomNumber(min, max, rnd);

c#找不到具有3个参数的getRandomNumber函数的另一个定义,因此出错。

仔细考虑你期望这段代码做什么。对我来说它没有意义,因为自编文档的代码使用变量和函数的描述性名称并且基本应该阅读它拼出算法。当我阅读该代码时,我不知道为什么产生随机数的函数会将特色故事列表作为参数。如果函数被称为getRandomStory,也许......?然后我想知道 - 什么是故事,为什么生成随机数有时会导致数字成为一个故事,有时不会?如果没有,那么通过再次调用随机数函数可以获得什么,省略故事列表?

无法破译该代码;你会在6个月后回到它并思考&#34;呜呜??&#34;。如果您正在寻求深入了解任何编程语言的细节,那么从一开始就是一个好的策略,在评论中写出算法:

//get a random story from the known ones, but include a chance that a new random number can become a story
//generate a random number
//if it's in the known list, just return it
//if not in the list, add it and return it

为什么这样?好吧..你用英语思考过你的一生,所以用英语把算法推出来然后把它翻译成c#。最后,如果c#清晰且命名良好,则注释将在很大程度上是多余的,可以删除。一些模糊的代码可能会从保留拼写出来的评论中受益,但实际上它是简化代码的候选者,所以它看起来不像代码高尔夫拼图*更像是你喜欢维护的东西如果你没有写

*例如,你想保持这个吗?

//return the first occurrence of a repeated int 
a=>{for(int p=0,q=0;;q++)while(p++<q)if(a[q]==a[p])return a[q];}

答案 1 :(得分:1)

您的代码实际上有两个错误:

@functions {
    public int getRandomNumber(int min, int max, Random rnd, (2) int[] featuredStories) {

    int randomNumber = rnd.Next(min, max);

    if (featuredStories.Contains(randomNumber)){
        randomNumber = getRandomNumber(min, max, rnd); (1)
    }else{
        featuredStories.Add(randomNumber);
    }


    return randomNumber;
}
  1. 第一个错误是您没有在递归调用中传递featuredStories
  2. 第二个错误是int[](这是Array<int>的快捷方式)没有Add方法,您还将featuredStories定义为{{1}在页面顶部。
  3. 因此,要解决这些问题,请将方法更改为:

    List<int>