1. 程式人生 > 其它 >C#報錯:CS0236:欄位設定項初始值無法引用非靜態欄位、方法或屬性xxx

C#報錯:CS0236:欄位設定項初始值無法引用非靜態欄位、方法或屬性xxx

出現原因

找了個雪花演算法的靜態程式碼,以專案中的命名方式重寫為不靜態的。看著確實好像是洗稿抄襲了,確實也沒的辯。但其實每個網上找來的程式碼都會重寫一遍,不然根本不理解,出現問題也改不了。不如ctrl + c,v的時候就一步到位。
把程式碼中的靜態全取消後就出現了這個問題。

問題解析

在類中只能定義屬性或變數,不能變數引用變數。

private string para1 = "aa";//可以
private string para2 = "bb";//可以

private string result = para1 + para2;
// 就會報錯:欄位設定項初始值無法引用非靜態欄位、方法或屬性xxx

// 即使放到建構函式中也不行,也會報錯
public SnowFlakeIDService()
{
    private string result = para1 + para2;
}

原因與各種屬性的記憶體的分配順序有關,沒太理解上去,別這麼用就行了,非要用就宣告為靜態吧。
還有一種通過屬性獲取的方式。但涉及到計算就又不行,所以還是得宣告為靜態。