使用"如布尔?" 而不是"对象的东西= ViewState ["hi"]"

Pro*_*ool 8 c#

所以我要通过旧代码(2.0),我遇到了这个:

object isReviewingValue = ViewState["IsReviewing"];

if (isReviewingValue is bool)
{
  return (bool)isReviewingValue;
}
Run Code Online (Sandbox Code Playgroud)

我的第一个想法是给我们"as"关键字,以避免不必要的

(bool)isReviewingValue;
Run Code Online (Sandbox Code Playgroud)

但"as"仅适用于非值类型.没问题,我就这样做了:

bool? isReviewingValue= ViewState["IsReviewing"] as bool?;
if (isReviewingValue.HasValue)
{
  return isReviewingValue.Value;
}
Run Code Online (Sandbox Code Playgroud)

问题是:除了看起来更具可读性之外,这实际上更好吗?

编辑:

public Stopwatch AsRun()
{
  Stopwatch watch = new Stopwatch();

  watch.Start();
  for (Int32 loopCounter = 0; loopCounter < 10000; loopCounter++)
  {
    Object value = true;
    Boolean? test = value as Boolean?;
    if (test.HasValue)
    {
      Boolean something = test.Value;
    }
  }
  watch.Stop();

  return watch;
}

public Stopwatch ObjectIsRun()
{
  Stopwatch watch = new Stopwatch();

  watch.Start();
  for (Int32 loopCounter = 0; loopCounter < 10000; loopCounter++)
  {
    Object test = true;
    if (test is Boolean)
    {
      Boolean something = (Boolean)test;
    }
  }
  watch.Stop();

  return watch;
}
Run Code Online (Sandbox Code Playgroud)

答案:事实证明,上述方法以测试方式运行,原始代码的速度提高了大约10倍.

Cha*_*ion 18

合并运算符将为您删除一些代码.要回答你的问题,正如吉米明确指出的那样,两者之间的技术差异微不足道,因此请使用您认为更好的方法.就个人而言,我倾向于使用这种方法.我可能会被认为有偏见......

private bool GetIsReviewing()
{
    return (ViewState["IsReviewing"] as bool?) ?? false;
}
Run Code Online (Sandbox Code Playgroud)


Jim*_*mmy 5

我认为第一个更具可读性,并且它也更快[大约10纳秒而不是100纳秒,根据我刚刚运行的测试;)(即不会以任何方式减慢程序速度)]