2014-08-29 44 views
0

我试图创建在C#中的一类广泛,在Windows智能手机8.1的项目,所以,当我创建了一个方法,我可以类广泛

我做了什么,当初是:

public sealed partial class GamePage : Page 
    { 
     int Score = 0; 
     int count = 0; 
     private DispatcherTimer Timer; 
     public ColorsClass color = new ColorsClass(); 
     public int RandBlue = 0; 
     int RandGreen = 0; 
     int RandRed = 0; 
     int RandYellow = 0; 
     int RandPurple = 0; 
     int RandYellowGreen = 0; 
     int RandOrange = 0; 
     int RandGray = 0; 
     bool Equal = true; 
     int Fail; 
     int Hit; 
     int Lives = 10; 
      Rectangle[] Block = { Block01, Block02, Block03, Block04, Block05, Block06, Block07, Block08, Block09, Block10, Block11, Block12 }; 
      int[] RandomColors = { RandBlue, RandGreen, RandRed, RandYellow, RandPurple, RandYellowGreen, RandGray }; 

... 

} 

但它给我的消息“一个字段初始不能引用非静态字段,方法或属性...”

然后我尝试这个选项,我看到当我在搜索互联网:

public sealed partial class GamePage : Page 
    { 
     int Score = 0; 
     int count = 0; 
     private DispatcherTimer Timer; 
     public ColorsClass color = new ColorsClass(); 
     public int RandBlue = 0; 
     int RandGreen = 0; 
     int RandRed = 0; 
     int RandYellow = 0; 
     int RandPurple = 0; 
     int RandYellowGreen = 0; 
     int RandOrange = 0; 
     int RandGray = 0; 
     bool Equal = true; 
     int Fail; 
     int Hit; 
     int Lives = 10; 
     int [] 
     Random rand = new Random(); 

     public GamePage() 
     { 

      this.InitializeComponent(); 

     DispatchTheTime(); 
     RandomColors = new int[] { RandBlue, RandGreen, RandRed, RandYellow, RandPurple, RandYellowGreen, RandGray }; 
... 

} 

这样我可以达到通过我创建的方法的阵列,但阵列值总是空..

我能做些什么?

+0

*但数组值始终为空。你确定?你试图访问它的地方?在'DispatchTheTime'方法里面? – 2014-08-29 11:15:19

+0

哪个数组?你的第二个例子是开始int数组的声明,但是没有完成它。仅供参考,在函数之外声明的变量具有类范围,意味着它们可以在整个班级中访问。如果你的意思是程序范围广,你需要一个公共访问的静态数组。 – 2014-08-29 11:15:31

+0

change the line'Rectangle [] Block = {Block01,Block02,Block03,Block04,Block05,Block06,Block07,Block08,Block09,Block10,Block11,Block12};'到'Rectangle [] Block = new Rectangle {Block01,Block02,Block03,Block04,Block05,Block06,Block07,Block08,Block09,Block10,Block11,Block12};'并再试一次 – 2014-08-29 11:16:50

回答

0

请记住,整数是值类型。如果您使用RandomColors创建整数数组,则只需将值的副本放入数组中。在这一点上,RandGreen和RandomColors [1]指向不同的内存位置,任何一个的更改都不会传播到另一个。 您必须决定是否要将值保存在实际声明的许多字段中,或者如果要将整数保存在数组中。

你可以更好地使用你的用例词典,并且只能从那里访问整数。

在类级别声明您RandomColors:

Dictionary<string, int> RandomColors = new Dictionary<string, int>(); 



public GamePage() 
{ 
    RandomColors.Add("RandGreen", 0); 
    RandomColors.Add("RandRed", 0); 


    //change like this: 
    RandomColors["RandGreen"] = 5; 

    //access like this: 
    int x = RandomColors["RandGreen"]; 
} 
0

每次当你创建一个新的GamePage你填充变量RandGreenRandRed的内容你的阵列,...

这时,这些变量设置为0。因此,您的阵列仅包含0 s。即使您稍后将其他值分配给RandGreen,RandRed,...阵列中的值也不会改变。

我希望这个例子可以很清楚的:

RandBlue = 0; 
var RandomColors = new int[] { RandBlue, RandGreen }; 
// RandColors[0] is 0 
RandBlue = 5; 
// RandColors[0] is still 0 

编辑:

错误消息“一个字段初始不能引用非静态字段,方法或属性。 ..“应该是自我解释。你可以使你的颜色变量const为了使它工作。但我想这对你来说没有任何意义。