c#有没有理由将String.contains与true内部进行比较?

时间:2018-04-05 08:04:34

标签: c# .net

我遇到了这段代码:

if(message.Contains("some text") == true)
是什么让我怀疑作者的意图是什么。 Contains()总是返回bool,所以更干净的版本应该是:

if(message.Contains("some text"))

我是对的还是以前的解决方案有专业的情况?

2 个答案:

答案 0 :(得分:3)

  

是否有任何使用if(condition == true)而不仅仅是if(condition)的情况?

是的,如果使用返回可空类型的空条件运算符:

string message = null;
if(message?.Contains("some text") == true)
{
   // ...
}

没有==这将无法编译,因为Nullable<bool>不是bool

另一个原因可能是您希望somelongcondition == false超过!somelongcondition,因为它很容易忽略感叹号。

在以下情况中,我更愿意选择一个更有意义的名称,但如果不可能== true== false至少表明它是一个bool:

if (flag123 == true)
{
   // ...
}

答案 1 :(得分:0)

行为完全相同。事实上,编译器将优化这些类型的调用以删除多余的比较,因此:

if(message.Contains("some text") == true)

实际上将被编译为:

if(message.Contains("some text"))

只要该方法返回bool(而不是bool?,这实际上是编译时错误)