所以我要通过旧代码(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)