如果可以,请帮助我理解这一点。我只用了几个月的时间学习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;
}
}
}
我需要做些什么才能让方法操作现有变量或从方法生成数据,以便在方法本身中未定义的某些进一步用途?先感谢您!
答案 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();
)。