2017-02-27 59 views
-2

如果可以,请帮助我理解这一点。我只有几个月的时间学习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; 


     } 

    } 

} 

什么我需要做的,有一个方法,从一些进一步的使用不是方法本身定义的方法处理现有变量或生成的数据?先谢谢你!

+6

'D20();' - >'X = D20();'' –

+1

Console.WriteLine(D20());' – Equalsk

+1

除了'X = D20()',如果我是你,我会在'd20()'里面重命名'x' *,并且只在'd20()'*里面重命名为'y'或'charltonHeston'或绝对世界上除'x'之外的任何东西,在'd20()'中声明的'x'与任何其他的'x'完全无关,名称中的相似性是无意义或无意义的巧合。 –

回答

3

xd20()方法内是不一样的变量作为在从中调用d20范围的x。你需要告诉你想有从存储在后者中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); 
} 
1

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

尝试

int x = d20(); 
5

方法的返回值就分配给变量x这样

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

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

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

记住一个事实,即您的两个方法有一个变种从编译器的角度来看,他们名为x纯粹是巧合 - 他们绝对不会指同一件事。作为一个比喻,我知道几个和我一样名字的人,但他们是而不是我。

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

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返回的结果。

或者你可以调整你的代码,这样,其分配的d20x结果。

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

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

最后你可以通过声明xMain使用较高的范围。

int x; 

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

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