访问非静态字段,方法或属性
需要对象引用当我使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;
}
}
答案 0 :(得分:3)
您正在通过该方法访问context
。它需要是静态的才能使用它:
private static readonly HttpContext context;
readonly
没有static
。实例级别为readonly
。 (另一方面,const
根据定义是静态的)
我会警告您使用static
HttpContext
,因为static
在ASP.NET中的实例之间共享。您最终可能会混用用户会话!
使用静态方法本身的HttpContext.Current
。
答案 1 :(得分: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;
}