Mik*_*keG 20 c# visual-studio-2015
我意识到处理可空类型的正确方法是使用HasValue属性.但我想知道为什么以下switch语句在null case而不是default上打破.使用VS2015 C#4.0.另一台使用VS2010 C#4.0的计算机没有同样的问题.
private void Testing()
{
bool? boolValue = true;
switch (boolValue)
{
case null:
break; //even though value is true, code runs here
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:使用任何Nullableif仅指定行为,case Null并且default指定行为.
这不是答案,我只是分享由VS2013和VS2015生成的IL代码.
原始C#代码:
public void Testing()
{
bool? boolValue = true;
switch (boolValue)
{
case null:
Console.WriteLine("null");
break;
default:
Console.WriteLine("default");
break;
}
}
Run Code Online (Sandbox Code Playgroud)
VS2013 IL(反编译):
public void Testing()
{
bool? boolValue = new bool?(true);
bool valueOrDefault = boolValue.GetValueOrDefault();
if (boolValue.HasValue)
{
Console.WriteLine("default");
}
else
{
Console.WriteLine("null");
}
}
Run Code Online (Sandbox Code Playgroud)
VS2015 IL(反编译):
public void Testing()
{
bool? flag = new bool?(true);
bool? flag2 = flag;
bool? flag3 = flag2;
if (flag3.HasValue)
{
bool valueOrDefault = flag3.GetValueOrDefault();
}
Console.WriteLine("null");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1449 次 |
| 最近记录: |