C# 将这个布尔返回条件显式地写为if-else有什么技术优势?

C# 将这个布尔返回条件显式地写为if-else有什么技术优势?,c#,.net,inline,jit,C#,.net,Inline,Jit,我在查看时看到了以下函数定义: [纯] [系统.运行时.版本控制.非版本] 公共静态布尔值为正无穷大(双d){ //Jit将使用此函数生成可内联的代码 if(d==双正整数) { 返回true; } 其他的 { 返回false; } } 那篇摘录中的评论引起了我的注意。它说: Jit将使用此函数生成可内联的代码 这似乎表明开发人员希望下面的if语句影响内联,因此在单个return行上选择它。我理解JIT内联的概念(至少,我认为我理解),但我不知道“if”构造如何与这样的操作相关 就JIT的优化

我在查看时看到了以下函数定义:

[纯]
[系统.运行时.版本控制.非版本]
公共静态布尔值为正无穷大(双d){
//Jit将使用此函数生成可内联的代码
if(d==双正整数)
{
返回true;
}
其他的
{
返回false;
}
}
那篇摘录中的评论引起了我的注意。它说:

Jit将使用此函数生成可内联的代码

这似乎表明开发人员希望下面的
if
语句影响内联,因此在单个
return
行上选择它。我理解JIT内联的概念(至少,我认为我理解),但我不知道“if”构造如何与这样的操作相关


就JIT的优化规则而言,以这种方式编写
if
有什么好处?有没有,或者这可能只是一个错误?

似乎他们并不关心
是否定的
是不确定的
是不安全的
(可能是因为这些都是不安全的,因此处理方式不同)。这个评论并不是你认为的意思。在.NET 1 .x中,这个方法是在CLR中实现的,用C++编写。因此无法内联。在.NET2.0中,它被移到了C代码中,现在它可以内联了。程序员喜欢这种风格的原因很难猜测,一个非常粗略的猜测是他喜欢能够轻松设置断点。许多早期的.NET代码都受到可测试性问题的影响,尤其是在CLR源代码中。在我的编译器版本中,
d==double.PositiveInfinity
d==double.PositiveInfinity?true:false
if
构造都产生不同的IL。我没有检查这些版本中哪些是内联的——我当然希望它们都是内联的,但即使是这样,在编写这段代码时,情况很可能已经不同了。@Hans该文件中定义的大多数其他函数都使用一行
return
。你认为这仅仅是不同开发人员偏好的结果,而没有人愿意将其正常化吗?代码库的其余部分的格式非常清晰,非常突出,但它是可信的。你要求我们推测另一个人在编写代码时的意图,使你的问题“主要基于观点”。通过研究.NET JIT编译器的内联规则和行为,您可能会获得一些见解——请参见和,但当时使用的抖动是否与今天可以研究的抖动相同,值得怀疑。如果当时有一个有效的优化,那么今天可能根本就不相关了。。。