метод расширения строки для сеанса ["ключ"] - PullRequest
3 голосов
/ 05 марта 2011

Иногда, когда мы обращаемся к Session["key"].ToString(), это дает исключение, когда сессия заканчивается, и в кодировании мы пытаемся получить доступ к переменной сеанса.Поэтому я пытаюсь создать метод расширения для класса object, чтобы я мог написать его как Session["key"].getString() в кодировании, чтобы каждый раз, когда мне не нужно было делать Convert.ToString(session["key"])

Любые другие решениятакже заметно.

Ответы [ 6 ]

5 голосов
/ 05 марта 2011

Просто используйте нуль-объединяющий оператор:

string value = (session["key"] ?? String.Empty).ToString();

Обновление
Если у вас должен быть метод для этого (расширение или иное), я бы сделал что-то вроде:

public static string GetValue(this HttpSessionState session, string key)
{
   // TODO: Insert appropriate error checking here.

   return (session[key] ?? String.Empty).ToString();
}

Я мог бы даже пойти настолько далеко, чтобы сделать его универсальным для других возможных типов с помощью вызова GetValue, который принимает селектор и затем использует лямбда-выражения:

public static T GetValue<T>(this HttpSessionState session, string key, Func<object, T> valueSelector)
{
    return valueSelector(session[key]);
}

public static string GetStringValue(this HttpSessionState session, string key)
{
    return session.GetValue(key, x => (x ?? String.Empty).ToString());
}

Затем вы должны использовать следующее:

string value = session.GetStringValue("key");
5 голосов
/ 05 марта 2011
public static class ObjectExtensions
{
    public static string GetString(this object o)
    {
        if (o == null)
        {
            return string.Empty;
        }
        return Convert.ToString(o);
    }
}

и затем:

string value = Session["key"].GetString();

или отметьте это:

public static class SessionExtensions
{
    public static string GetString(this HttpSessionStateBase session, string key)
    {
        if (session == null)
        {
            return string.Empty;
        }
        var value = session[key];
        if (value == null)
        {
            return string.Empty;
        }
        return Convert.ToString(value);
    }
}

и затем:

string value = Session.GetString("key");
0 голосов
/ 10 января 2017

Вот простой способ доступа к сеансу в Метод расширения :

var loggedUser = (User)System.Web.HttpContext.Current.Session["User"]; 
0 голосов
/ 05 марта 2011
public static class ObjectExtensions
{
  public static string SafelyToString(this object o)
  {
     return o != null ? o.ToString() : string.Empty;
  }
}

Это позволит Session["key"].SafelyToString()

Однако вы не сможете различить пустую строку в переменной сеанса и сеанс с истекшим сроком действия.

0 голосов
/ 05 марта 2011

Я бы также посоветовал использовать для этого свойства.

protected YourType PropertyName
{
  get 
  {
    if(Session["Sessionname"] != null)
    {
      return Session["Sessionname"] as YourType;
    }
    YourType newItem = new YourType();
    // set vars
    Session["Sessionname"] = newItem;
    return newItem;
  }
  set
  {
   Session["Sessionname"] = value;
  }
}

Как видите, я выбрал protected в качестве модификатора доступа. Если хотите, вы можете поместить его в public class и сделать свойство static.

Или вы можете использовать класс, производный от System.Web.UI.Page.

public class MyCustomBaseClass : System.Web.UI.Page
{
   protected YourType PropertyName
   {
    // get and set like above
    }
}

Теперь вы можете заменить наследование на своих страницах контента с System.Web.UI.Page на MyCustomBaseClass и можете легко вызвать this.PropertyName.

0 голосов
/ 05 марта 2011

Может быть, это может быть альтернативой?

object oKey = session["key"] ?? String.Empty;
string sKey = (string)oKey;

или

string sKey = session["key"] == null ? String.Empty : (string)session["key"]
...