Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 杂项表演_C#_Memory Management - Fatal编程技术网

C# 杂项表演

C# 杂项表演,c#,memory-management,C#,Memory Management,在C#Net中进行比较或转换更快吗? 例如: bool? flag = null; ... if(flag == true)... or if((bool)flag)... 此外,强制转换的成本(内存中)是多少?如果内存可用,编译器将强制您在If语句中使用bool之前将bool?强制转换为bool。您可能喜欢空合并运算符: //If flag == null then return false, otherwise return the value of flag. if

在C#Net中进行比较或转换更快吗?
例如:

bool? flag = null;    
...    
if(flag == true)... or if((bool)flag)...  

此外,强制转换的成本(内存中)是多少?

如果内存可用,编译器将强制您在If语句中使用
bool之前将
bool?
强制转换为
bool
。您可能喜欢空合并运算符:

//If flag == null then return false, otherwise return the value of flag.
if (flag ?? false)

IIRC,这些翻译成大致相同的东西。除非您进行了大量的此类检查,否则在任何实际用途中都不会注意到差异。

如果标志中的空值表示“false”,我将使用比较。强制转换是个坏主意,因为如果标志为null,它将抛出异常。要保存,必须在强制转换之前测试null。这意味着您必须进行比较和转换,而不是仅进行比较。

性能差异可以忽略不计

还要记住

bool? flag = null;
// ...other code...
if ((bool)flag)
{
}

如果变量声明和强制转换之间的代码中未分配
标志
,则可能引发
InvalidOperationException

我必须询问。。。为什么要使用可空布尔值?我总是发现,将bool设置为“正确”的值,然后仅根据某些条件更改它是有效的,然后您可以避免这个问题:您可以简单地使用“if(flag)”,我认为这是说明我的问题的最简单的方法。不过,您是对的,只使用布尔值是更好的方法。