gpt4 book ai didi

c# - List as 'out' 参数导致错误。为什么?

转载 作者:太空狗 更新时间:2023-10-29 17:33:31 25 4
gpt4 key购买 nike

在这段代码中:

public bool SomeMethod(out List<Task> tasks)
{
var task = Task.Factory.StartNew(() => Process.Start(info));
tasks.Add(task);
}

我得到一个错误,“使用未分配的输出参数‘任务’”。为什么?

在一个 MSDN 示例中,只使用了 out参数

class OutExample
{
static void Method(out int i)
{
i = 44;
}

static void Main()
{
int value;
Method(out value);
// value is now 44
}
}

是不是因为List<T>

最佳答案

您必须初始化 out方法体中的参数(即创建一个新的 List<Task> 实例并将其分配给 out 参数):

public bool SomeMethod(out List<Task> tasks) {
var task = Task.Factory.StartNew(() => Process.Start(info);
tasks = new List<Task>() { task };
...
}

我正在使用集合初始化语法将任务添加到列表中,但您可以调用 Add如果您愿意,可以使用方法。

你应该这样调用方法:

List<Task> tasks;
SomeMethod(out tasks);
var newTask = tasks[0]; // Access the task just created.

C# 7.0 引入了新的更简单的语法,您可以在调用函数时使用 out 声明变量。参数:

SomeMethod(out var tasks);
var newTask = tasks[0]; // Access the task just created.

作为 List<T>通过引用传递你可以去掉 out范围。然后您必须在调用方法之前创建列表:

public bool SomeMethod(List<Task> tasks) {
var task = Task.Factory.StartNew(() => Process.Start(info);
tasks.Add(task);
...
}

然后这样调用它:

var tasks = new List<Task>();
SomeMethod(tasks);
var newTask = tasks[0]; // Access the task just created.

一般来说,最好避免 out参数,因为它们可能会造成混淆。

关于c# - List<T> as 'out' 参数导致错误。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6111320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com