簡體   English   中英

c#數組初始化“無法引用非靜態字段,方法或屬性”錯誤

[英]c# array initialization “cannot reference the non-static field, method or property” error

我是一名新手程序員,目前正在學習c#和Unity3d。

我嘗試初始化公共float變量數組時遇到問題。

    [Range (0,1)]
public float appleProbability = 0.4f ;

[Range (0,1)]
public float fishProbability = 0.2f ;

[Range (0,1)]
public float cheeseProbability = 0.10f ;

[Range (0,1)]
public float poopProbability = 0.14f ;

[Range (0,1)]
public float bombProbability = 0.14f ;

[Range (0,1)]
public float starProbability = 0.02f ;

private float[] probs = new float[] {appleProbability, fishProbability, cheeseProbability, poopProbability, bombProbability, starProbability};

([Range(0,1)]應該在腳本檢查器中統一創建一個滑塊,以便您可以使用滑塊在0和1之間操縱公共變量。)

我收到錯誤消息:“字段初始化程序無法引用非靜態字段,方法或屬性'GameManager.appleProbability'。” (其他變量相同)

我嘗試了以下代碼進行測試:

    public int blub = 1;
public int hub = 2;

private int[] bla = new int[3];

bla[0] = blub;

但出現錯誤:“無法在變量聲明中指定數組大小(嘗試使用'new'表達式進行初始化)。”

奇怪的是,第一個錯誤消失了,當我遇到第二個錯誤時,我也沒有從第一個錯誤更改代碼。

我已經閱讀了所有可能的c#數組初始化語法的問題,但無濟於事。

我有點愚蠢,但我沒有收到錯誤:/

編譯可精確地告訴您正在發生的事情-您無法在數組初始化程序中引用非靜態字段。

您可以通過以下兩種方法解決此問題:

  • 如果可以將概率設為static ,請將它們設為static ,甚至將它們的const設為只讀。
  • 否則,將初始化移到類的構造函數中。

這是第一種選擇:

[Range (0,1)]
public static float fishProbability = 0.2f;
...

這是第二種選擇:

private float[] probs;
public MyClassConstructor() {
    probs = new float[] {appleProbability, fishProbability, cheeseProbability, poopProbability, bombProbability, starProbability};
}

您試圖在未初始化值的情況下將值設置為數組,則需要將這些值設置為靜態,在數組中使用硬編碼默認值,或者在構造函數中初始化這些值:

[Range (0,1)]
public static float appleProbability = 0.4f ;
[Range (0,1)]
public static float fishProbability = 0.2f ;
[Range (0,1)]
public static float cheeseProbability = 0.10f ;
[Range (0,1)]
public static float poopProbability = 0.14f ;
[Range (0,1)]
public static float bombProbability = 0.14f ;
[Range (0,1)]
public static float starProbability = 0.02f ;
private float[] probs = new float[] {
                       appleProbability, 
                       fishProbability, 
                       cheeseProbability, 
                       poopProbability, 
                       bombProbability, 
                       starProbability};

要么:

[Range (0,1)]
public float appleProbability = 0.4f ;
[Range (0,1)]
public float fishProbability = 0.2f ;
[Range (0,1)]
public float cheeseProbability = 0.10f ;
[Range (0,1)]
public float poopProbability = 0.14f ;
[Range (0,1)]
public float bombProbability = 0.14f ;
[Range (0,1)]
public float starProbability = 0.02f ;
private float[] probs = new float[] {
                       .4f, 
                       .2f, 
                       .10f, 
                       .14f, 
                       .14f, 
                       .02f};

要么:

[Range (0,1)]
public float appleProbability = 0.4f ;
[Range (0,1)]
public float fishProbability = 0.2f ;
[Range (0,1)]
public float cheeseProbability = 0.10f ;
[Range (0,1)]
public float poopProbability = 0.14f ;
[Range (0,1)]
public float bombProbability = 0.14f ;
[Range (0,1)]
public float starProbability = 0.02f ;
private float[] probs;
MyClass()
{
    probs = new float[] {
                       appleProbability, 
                       fishProbability, 
                       cheeseProbability, 
                       poopProbability, 
                       bombProbability, 
                       starProbability};
}

如果不更改它們,也可以使它們成為const而不是static。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM