何时在参数上使用 C# out 关键字

Nil*_*Pun 5 c#-4.0

我见过一些开发人员out在 void 函数的参数列表上使用关键字。我不太清楚下面的代码的优点和缺点:

List<string> listOfResult;    

public void public void (out listOfResult)
{
    //bla bla
}
Run Code Online (Sandbox Code Playgroud)

相对

public List<string> c(out listOfResult)
{
    List<string>  list= new List<string>();
    //bla bla

    return list;
}
Run Code Online (Sandbox Code Playgroud)

这两个代码片段是否完全有效,或者关键字是否有任何问题out

Ser*_*kiy 3

out当您需要从函数返回多个值时,关键字会很方便。很好的例子是TryXXX方法,它返回操作状态而不是抛出异常:

public bool TryParse(string str, out int value);
Run Code Online (Sandbox Code Playgroud)

但我不认为有任何理由将单个out参数与 void 方法一起使用...只需从方法中返回该值即可。使用起来会容易得多。比较:

List<string> list;
GetList(out list); // confusing method name
Run Code Online (Sandbox Code Playgroud)

List<string> list = GetList(); // nice name, one line of code
Run Code Online (Sandbox Code Playgroud)

如果获取列表可能会引发异常,那么您可以创建如下方法:

List<string> list;
if (TryGetList(out list)) // better than exception handling
{
   // list was filled successfully
}
Run Code Online (Sandbox Code Playgroud)