2016-02-28 72 views
-2

为什么这不起作用? 它是在视觉studo 2015,窗形成应用C#将随机转换为int visual studio 2015

namespace guessing 
{ 
    public partial class Form1 : Form 
    { 
     Random rnd = new Random(); 
     int rndm = rnd.Next(1, 13); 

有下RND一个错误,这表示:

“A字段初始不能引用非静态字段,方法,或 property'Form1.rnd'“

+4

也许你想写一个方法中的这些行,就像'Main'也许? –

回答

6

在C#中,语句不能立即在类声明下发生。他们需要成为功能或方法的一部分。

namespace guessing 
{ 
    public partial class Form1 : Form 
    { 
     void MethodX() 
     { 
      Random rnd = new Random(); 
      int rndm = rnd.Next(1, 13); 
      /* to be continued... */ 
     } 
    } 
} 
+1

注意这是非常不可靠的代码;如果'MethodX'在一个循环中被调用,它可以使用相同的'Random'种子并偏向'Next'的结果。 'rnd'应该可以是一个在构造函数中初始化的类变量。当然是 –

+0

。只是为了让代码编译来启动OP。没有他的功能意图的假设。 – dlatikay

+1

@dlatikay:如果你返回int,这将是值得回答的。 –

-1

试试这个:

namespace guessing 
{ 
    public partial class Form1 : Form 
    { 
     int rndm = new Random().Next(1, 13); 

编辑

针对TomTom公司:

有很多方法可以解决这个。如果您需要始终提供Random的实例,请在课程级别上定义它,就像您已有的一样。

namespace guessing 
{ 
    public partial class Form1 : Form 
    { 
     Random rand = new Random(); 
     int rndm = new Random().Next(1, 13); 

     // Or make it static. 
     static Random rand = new Random(); 
     int rndm = Form1.rand.Next(1, 13); 

     // Or a method 
     private int GetRandomInteger() 
     { 
      return new Random().Next(1, 13); 
      // or call your class level instance of Random 
     } 
+0

我会-1,因为它有不同的语义。具体来说,你无法从相同的随机实例中获得另一个随机数。 – TomTom

+0

@TomTom:@Tal在类级别上定义了“int”变量。我假设塔尔想要一个随机数字。你假设塔尔想要有数百个随机数字。 –

+0

其实没有。我认为塔尔在这里读了规则,并提出了一个非常简单的例子来证明问题。我真的假设他不想要一个随机数,只是以此为例。 – TomTom

0

是的,就像SonerGönül说的那样,你必须将这段代码添加到Form中的Method中。因为您可能使用设计器创建了表单,只需转到事件并创建一个方法created(或类似)。然后将您的代码放入创建的方法的主体中。