Sai*_*int 10 c# list out-parameters
在这段代码中:
public bool SomeMethod(out List<Task> tasks)
{
var task = Task.Factory.StartNew(() => Process.Start(info));
tasks.Add(task);
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,"使用未分配的参数'任务'".为什么?
在MSDN示例中,只使用out参数
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
Run Code Online (Sandbox Code Playgroud)
是因为List<T>?
Mar*_*age 13
您必须初始化out方法体中的参数(即创建一个新List<Task>实例并将其分配给out参数):
public bool SomeMethod(out List<Task> tasks) {
var task = Task.Factory.StartNew(() => Process.Start(info);
tasks = new List<Task>() { task };
...
}
Run Code Online (Sandbox Code Playgroud)
我正在使用集合初始化程序语法将任务添加到列表中,但Add如果您愿意,可以调用该方法.
您应该像这样调用方法:
List<Task> tasks;
SomeMethod(out tasks);
var newTask = tasks[0]; // Access the task just created.
Run Code Online (Sandbox Code Playgroud)
C#7.0引入了一种新的更简单的语法,您可以使用out参数在函数调用中声明变量:
SomeMethod(out var tasks);
var newTask = tasks[0]; // Access the task just created.
Run Code Online (Sandbox Code Playgroud)
作为a List<T>通过引用传递,您可以摆脱out参数.然后,您必须在调用方法之前创建列表:
public bool SomeMethod(List<Task> tasks) {
var task = Task.Factory.StartNew(() => Process.Start(info);
tasks.Add(task);
...
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
var tasks = new List<Task>();
SomeMethod(tasks);
var newTask = tasks[0]; // Access the task just created.
Run Code Online (Sandbox Code Playgroud)
一般来说,最好避免使用out参数,因为它们可能会造成混淆.
out意味着您的方法需要创建对象,然后将其分配给参数:
List<Task> tasks = new List<Task>();
tasks.Add(task);
Run Code Online (Sandbox Code Playgroud)