Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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#7.x语法后,是否有一个版本的;x??(x=MakeX())”;,其中x是通过out参数指定的?_C#_Syntax_Expression_Out_C# 7.0 - Fatal编程技术网

添加了C#7.x语法后,是否有一个版本的;x??(x=MakeX())”;,其中x是通过out参数指定的?

添加了C#7.x语法后,是否有一个版本的;x??(x=MakeX())”;,其中x是通过out参数指定的?,c#,syntax,expression,out,c#-7.0,C#,Syntax,Expression,Out,C# 7.0,C#中的一个成语“在第一次访问时创建值”1是使用如下2: 如果有一个细微的变化,MakeX被定义为void MakeX(out string x)而不是“标准的”string MakeX(),那么有没有办法利用C#[7]语法快捷键 (重写代码的方法有一百万种3;问题主要在于,是否有新的技巧允许在表达式中使用“out语句”。) 以下方法不起作用(可能比这更糟1..),但要点如下: public string X { get { return _x ?? { MakeX(out

C#中的一个成语“在第一次访问时创建值”1是使用如下2:

如果有一个细微的变化,
MakeX
被定义为
void MakeX(out string x)
而不是“标准的”
string MakeX()
,那么有没有办法利用C#[7]语法快捷键

(重写代码的方法有一百万种3;问题主要在于,是否有新的技巧允许在表达式中使用“out语句”。)

以下方法不起作用(可能比这更糟1..),但要点如下:

public string X {
   get {
       return _x ?? { MakeX(out _x); _x };
   }
}
语义长格式(有效..)类似于:

public string X {
   get {
       var x = _x;
       if (x != null) return x;
       MakeX(out x);
       return (_x = x);
   }
}
1假设只要返回值,线程安全性就不相关。没有关于
懒惰的建议
:}

2原始样式
get
没有问题


3这个问题特别是关于新语法,而不是对lambdas做“过于聪明的把戏”。因此,
return\ux??(()=>{MakeX(out x);return x;})()仍然会导致对问题的回答为“否”。

哇,你从这个问题中获得了所有乐趣。很遗憾,答案是“否”。由于
MakeX
是一个
void
,如果您愿意将
MakeX
定义为
string MakeX(out string x)
并使其始终返回
null
,那么您可以编写以下代码:
return\u x??MakeX(out_x)_x。请注意,这很令人困惑,而且您无法真正打败惯用的
return\ux??(x=MakeX())
@lucastrezesniewski在这种情况下,它可以写成
return\ux??MakeX(out ux)使用。我希望/发现更多的'out'-作为表达式支持:}
public string X {
   get {
       var x = _x;
       if (x != null) return x;
       MakeX(out x);
       return (_x = x);
   }
}