2016-07-26 109 views
0

一個對象引用當製備方法靜態 - 需要一個對象引用來訪問非靜態字段,訪問非靜態字段,方法或屬性是必需的

當我使GetCartId靜態的Visual Studio抱怨

public class Uno 
{ 
    private readonly HttpContext context; 

    public Uno() 
    { 
    } 

    public Uno(HttpContext _context) 
    { 
     context = _context; 
    } 
    public static string GetCartId() 
    { 
     string cartId = ""; 
     var stringId = context.Session.GetString("cart"); 
     if(stringId == null) 
     { 
      cartId = Guid.NewGuid().ToString(); 
      stringId = cartId; 
     } 
     else if(stringId != null) 
     { 
      cartId = stringId; 
     } 
     return cartId; 
    } 
} 
+1

@poke,我錯了投票關閉這一個問題,與一般的「從靜態訪問實例成員」。這個問題與'HttpContext.Current'相關。 – Sinatr

回答

3

您正在使用該方法訪問context。它必須是靜態的,爲了能夠使用它:

private static readonly HttpContext context; 

readonly不會使它static。實例級別爲readonly。 (const,另一方面是通過定義靜態)

我想提醒你,儘管使用staticHttpContext因爲static在ASP.NET跨實例共享。你可能最終混合用戶會話!

從靜態方法本身使用HttpContext.Current

+0

是的,它已經解決了。謝謝 – Rampp

2

context不是靜態的,所以你不能從靜態方法訪問它,而沒有Uno的實例。但即使如此,你也無法訪問它,因爲它是private

相反,我會用HttpContext.Current甚至在靜態方法的工作原理:

public static string GetCartId() 
{ 
    var context = HttpContext.Current; 
    if(context == null) return null; 
    string cartId = ""; 
    var stringId = context.Session.GetString("cart"); 
    if(stringId == null) 
    { 
     cartId = Guid.NewGuid().ToString(); 
     stringId = cartId; 
    } 
    else if(stringId != null) 
    { 
     cartId = stringId; 
    } 
    return cartId; 
} 
+0

是的,我已經意識到並編輯了我的代碼。現在,它的作品謝謝你。 – Rampp

相關問題