【问题标题】:How do i stop the variable from resetting如何阻止变量重置
【发布时间】:2016-08-02 20:36:19
【问题描述】:

在我的代码中,我有一个带有两个参数的方法。 一个参数接受一个 int 值,另一个接受一个数组。

例如

 public void NextSong(int i, TagLib.File[] queue)
 {
    i++;
    SONG_URL = queue[i].Name;
    Stop();
    Play();
 }

我的问题是每次调用这个变量时都是这样:

NextSong(0, SongQueue);

它恢复到放置在参数字段中的数量。我该如何阻止这种情况?

【问题讨论】:

    标签: c# .net taglib-sharp cscore


    【解决方案1】:

    两种方式:

    public int NextSong(int i, TagLib.File[] queue)
    {
        i++;
        SONG_URL = queue[i].Name;
        Stop();
        Play();
        return i;
    }
    
    int i = 0;
    i= NextSong(i, SongQueue);
    

    这里我们将i 的变量传递给方法,在方法期间我们递增该变量,然后通过return 将其传回。我们现在已经引用了该变量。

    public void NextSong(TagLib.File[] queue, out int i)
    {
        i++;
        SONG_URL = queue[i].Name;
        Stop();
        Play();
    }
    
    int i = 0;
    NextSong(SongQueue, out i);
    

    这使用了 out 功能,它强制某人传递将返回的变量。它通过引用传递变量(您也可以使用 ref,但由于 int 不能为 null,因此在这种情况下不会有太大变化)。

    【讨论】:

    【解决方案2】:

    这是按预期工作的,只要 0 将继续传递,变量将始终重置。

    您可以做些什么来更改NextSong 方法的签名以返回i 的值:

    public int NextSong(int i, TagLib.File[] queue)
    {
        i++;
        SONG_URL = queue[i].Name;
        Stop();
        Play();
    
        return i;
    }
    

    然后在您的代码中将一些全局值初始化为0 并按如下方式调用该方法:globalVariable = NextSong(globalVariable, SongQueue)

    【讨论】:

    • 谢谢,我通过初始化一个全局变量解决了这个问题,然后我增加了变量并将其添加为方法参数。我还删除了方法中的增量感谢您的帮助!
    猜你喜欢
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    相关资源
    最近更新 更多