Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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# 是吗,myval=(某个条件)?someVal:myval得到优化,以防值为false时不设置该值_C#_Optimization_Compiler Construction_Clr - Fatal编程技术网

C# 是吗,myval=(某个条件)?someVal:myval得到优化,以防值为false时不设置该值

C# 是吗,myval=(某个条件)?someVal:myval得到优化,以防值为false时不设置该值,c#,optimization,compiler-construction,clr,C#,Optimization,Compiler Construction,Clr,首先,我希望CLR能让我做这个?Request.Path,而不是创建一个: 但我想问的是,它会优化它吗?或者仍然分配。好吧,我个人会这样写: CPath = (CPath == null) ? Request.Path : CPath; 让它更清楚。其他地方提到的另一种选择是 if (CPath == null) { CPath = Request.Path; } 但是如果有额外的任务,你为什么会在意呢?你真的认为这将是一个重大的性能打击 注意,如果CPath是一个字段而不是一个局部

首先,我希望CLR能让我做这个?Request.Path,而不是创建一个:


但我想问的是,它会优化它吗?或者仍然分配。

好吧,我个人会这样写:

CPath = (CPath == null) ? Request.Path : CPath;
让它更清楚。其他地方提到的另一种选择是

if (CPath == null)
{
    CPath = Request.Path;
}
但是如果有额外的任务,你为什么会在意呢?你真的认为这将是一个重大的性能打击


注意,如果CPath是一个字段而不是一个局部变量,那么它可能会产生差异,因为CPath的值可能会在第一次检查和第二次评估之间,以及评估和赋值之间发生变化。这一点是否会被注意到取决于缓存等,但它并不像最初看起来那么简单。

我个人认为:

CPath = (CPath == null) ? Request.Path : CPath;
让它更清楚。其他地方提到的另一种选择是

if (CPath == null)
{
    CPath = Request.Path;
}
但是如果有额外的任务,你为什么会在意呢?你真的认为这将是一个重大的性能打击


注意,如果CPath是一个字段而不是一个局部变量,那么它可能会产生差异,因为CPath的值可能会在第一次检查和第二次评估之间,以及评估和赋值之间发生变化。是否会注意到这一点取决于缓存等,但它并不像最初看起来的那么简单。

您可以使用空合并运算符:CPath=CPath??请求路径;您可以使用空合并运算符:CPath=CPath??请求路径;