使用从方法返回的数据

时间:2017-02-27 17:17:49

标签: c# methods

如果可以,请帮助我理解这一点。我只用了几个月的时间学习C#,似乎错过了一些东西。我理解如何创建方法,但似乎无法检索要在其外部使用的数据。请参阅我刚创建的示例,尝试创建一个生成1到20之间的数字然后覆盖现有变量的方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _170227
{
    class Program
    {


        static void Main(string[] args)
        {
          int  x = 0;

            d20();
            Console.WriteLine(x);

        }


        static int d20()
        {
            Random myRandom = new Random();
            int x = myRandom.Next(20) + 1;
            return x;


        }

    }

}

我需要做些什么才能让方法操作现有变量或从方法生成数据,以便在方法本身中未定义的某些进一步用途?先感谢您!

5 个答案:

答案 0 :(得分:6)

只需将方法的返回值分配给x变量,就像这样

TestClass test;
try
{
test = new TestClass();
}
finally
{
if(test != null)
      test.Dispose();
}

答案 1 :(得分:3)

x方法中的d20()与您调用x的范围中的d20不是同一个变量。您需要告诉编译器您希望将d20的输出存储在后者中,并赋值:

static void Main(string[] args)
{
    int x = 0;

    x = d20();
    Console.WriteLine(x);
}

如果您愿意,可以在同一语句中声明并指定x

static void Main(string[] args)
{
    int x = d20();
    Console.WriteLine(x);
}

答案 2 :(得分:2)

要解释为什么发生这种情况,您需要了解范围

在您的示例中,您使用所谓的本地范围声明x。也就是说x仅存在于您声明它的方法中。

在此示例中,x仅存在于名为Main的方法中。

static void Main(string[] args)
{
    int  x = 0;
}

如果名为d20的方法看起来像这样,则会出现编译时错误,指出x未定义。

static int d20()
{
    Random myRandom = new Random();
    x = myRandom.Next(20) + 1; // Error would occur here
    return x;
}

这是因为d20有自己的范围,与Main分开。

有几个不同的答案:

最短的只是Console.WriteLine(d20());。这告诉程序打印从方法d20返回的结果。

或者,您可以重新构建代码,将d20的结果分配给x

static void Main(string[] args)
{
    int x = d20();
    Console.WriteLine(x);
}

static int d20()
{
    Random myRandom = new Random();
    return myRandom.Next(20) + 1;
}

最后,您可以在x之外声明Main来使用更高的范围。

int x;

static void Main(string[] args)
{
       d20();
       Console.WriteLine(x);
}

static void d20()
{
    Random myRandom = new Random();
    x = myRandom.Next(20) + 1;
}

答案 3 :(得分:1)

您需要将方法返回的值分配给变量。

尝试

int x = d20();

答案 4 :(得分:0)

请记住,从编译器的角度来看,你的两个方法都有一个名为x的变量的事实纯属巧合 - 它们肯定不会引用相同的事情。作为一个类比,我认识几个与我名字相同的人,但他们我。

正如其他人所指出的那样,您需要将d20()的返回值存储在变量中(即int x = d20();)。