2016-07-26 9 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が定義することにより、静的である)

staticがASP.NET内のインスタンス間で共有されているのでHttpContextstaticを使用するのに、私は警告を表示します。あなたはユーザーセッションを混ぜることになるかもしれません!

staticメソッド自体から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

関連する問題