[英]asp.net c# - A field initializer cannot reference the non-static field, method or property
[英]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.