Базовая логическая логика в C # - PullRequest
0 голосов
/ 26 января 2011

Что лучше из следующего?

this.isLoggedIn = (bool)HttpContext.Current.Session["li"] == true;

или

this.isLoggedIn = (bool)HttpContext.Current.Session["li"];

Это должно быть истинным ТОЛЬКО, когда сеанс является истинным.Если для сеанса установлено значение false, будет ли это оцениваться как true в # 2, как он существует?Или это оценка его стоимости?

Ответы [ 8 ]

3 голосов
/ 26 января 2011

Второй:

this.isLoggedIn = (bool)HttpContext.Current.Session["li"];

(bool)HttpContext.Current.Session["li"] уже является логическим значением (так что будет либо true, либо false), поэтому не нужно дополнительное сравнение и возвращаемое значение логического значенияexpression.

В любом случае, вам нужно проверить, существует ли переменная сеанса li, прежде чем пытаться ее привести, или ваш код сгенерирует (я думаю NullReferenceException).

2 голосов
/ 26 января 2011

Последнее понятнее, ИМО. Хотя они функционально эквивалентны - в обоих случаях он извлекает значение "li" из сеанса и пытается преобразовать его в bool, вызывая исключение, если значение отсутствует.

1 голос
/ 27 января 2011

Создать свойство для желаемого значения:

public bool IsLoggedIn {
  get { return (bool)HttpContext.Current.Session["li"]; }
}

Вы могли бы даже пройти один дополнительный уровень, если в классе часто используется сессия:

public bool IsLoggedIn {
  get { return (bool)Session["li"]; }
}

private HttpSessionState Session {
  get { return HttpContext.Current.Session; }
}

Кроме того, если вы когда-нибудь захотите посмотреть на сеанс самостоятельно, используйте более подходящий ключ, например "IsLoggedIn", вместо "li".

Возможно, было бы неплохо создать специальный класс для этих значений для всего приложения:

public static class MyAppSession {

  const string IsLoggedInKey = "IsLoggedIn";

  public static bool IsLoggedIn {
    get { 
      return Session[IsLoggedInKey] != null && (bool)Session[IsLoggedInKey]; 
    }
    internal set { Session[IsLoggedInKey] = value; }
  }

  // ...

  private static HttpSessionState Session {
    get { return HttpContext.Current.Session; }
  }

}
0 голосов
/ 13 апреля 2011

Я бы использовал второй вариант с вариантом:this.isLoggedIn = (bool) (HttpContext.Current.Session ["li"] ?? "false");

is нуль-объединяющий оператор - он дает значение "false" выражению на его левой стороне, в случае, если оно оказывается нулевым.

0 голосов
/ 26 января 2011

Вам никогда не нужно писать код, который говорит:

bool x = (y == true);

Вместо этого просто используйте

bool x = y;

В вашем конкретном случаевы должны использовать:

this.isLoggedIn = HttpContext.Current.Session["li"] != null 
    && (bool)HttpContext.Current.Session["li"];

Таким образом, вы не получите исключение, если сеанс ["li"] еще не назначен.Однако вы получите исключение, если Session ["li"] не может быть преобразован в bool.

0 голосов
/ 26 января 2011

Просто поместите ожидаемое значение вместо выражения, и оно станет довольно ясным:

First example:
Before: this.isLoggedIn = (bool)HttpContext.Current.Session["li"] == true;
After:  this.isLoggedIn = true == true;

Second example:
Before: this.isLoggedIn = (bool)HttpContext.Current.Session["li"];
After:  this.isLoggedIn = true;

Теперь попробуйте то же самое для случая false:

First example:
Before: this.isLoggedIn = (bool)HttpContext.Current.Session["li"] == true;
After:  this.isLoggedIn = false == true;

Second example:
Before: this.isLoggedIn = (bool)HttpContext.Current.Session["li"];
After:  this.isLoggedIn = false;

Как видите, между двумя подходами не будет никакой разницы в результате.Все сводится к вопросам о стиле кодирования и удобочитаемости, где, как я полагаю, вы найдете уклон в сторону более короткой версии.

0 голосов
/ 26 января 2011

Первый и второй подход эквивалентны, но первый - многословен на мой вкус.Мне нравится второй намного лучше.

Так же, как мне это нравится

bool accepted = true;
if( accepted)
{
  ..
}

Лучше, чем

bool accepted = true;
if( accepted == true)
{
  ..
}

Я чувствую, что так будет яснее, если переменные правильноимя.

0 голосов
/ 26 января 2011

Обе части кода равны, поэтому чем лучше вторая (тем короче).

...