2016-07-26 115 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

相关问题