我不期待一个明确的是或否。您可能拥有的任何知识我都会考虑作为答案。
private String CalculateCharge(Nullable<Decimal> bill, Nullable<Decimal> rate)
{
return ((bill ?? 0.0m) * (rate ?? 0.0m)).ToString("C");
}
我不期待一个明确的是或否。您可能拥有的任何知识我都会考虑作为答案。
private String CalculateCharge(Nullable<Decimal> bill, Nullable<Decimal> rate)
{
return ((bill ?? 0.0m) * (rate ?? 0.0m)).ToString("C");
}
内联是 JIT 的实现细节,而不是 C# 编译器的实现细节。来自Eric Gunnerson 的博客:
JIT 使用许多启发式方法来决定一个方法是否应该内联。以下是其中比较重要的列表(请注意,这并不详尽):
- 大于 32 字节 IL 的方法将不会被内联。
- 虚函数没有内联。
- 具有复杂流控制的方法不会被内联。复杂流控制是除 if/then/else 之外的任何流控制;在这种情况下,切换或同时。
- 包含异常处理块的方法不是内联的,尽管抛出异常的方法仍然是内联的候选方法。
- 如果方法的任何形式参数是结构,则该方法将不会被内联。
尽管您的方法很短而且不是很复杂,因此它可能与启发式方法相匹配,Nullable<T>
但是struct
我猜您的方法没有内联。
根据经验,如果内联此方法提高了性能,JIT 将内联此方法;否则不会。但这实际上是 JIT 的实现细节,您无需编写任何代码:
我会仔细考虑对这些启发式进行显式编码,因为它们可能会在 JIT 的未来版本中发生变化。不要损害方法的正确性以试图保证它会被内联。
编辑:显然关于结构没有被内联的部分已经过时了;可以在Vance Morrison 的博客上找到更新的信息。