action委托传多个参数
时间: 2023-07-29 14:12:45 浏览: 89
委托传递参数
在C#中,如果您需要将多个参数传递给`Action`委托,有几种方法可以实现。
方法1:使用元组(Tuple)
您可以使用元组(Tuple)将多个参数打包,并将元组作为单个参数传递给`Action`委托。以下是一个示例:
```csharp
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
// 创建一个委托实例,并将多个参数作为元组传递给任务
Action<Tuple<int, string>> taskDelegate = new Action<Tuple<int, string>>(PrintValues);
var values = Tuple.Create(10, "Hello");
Task task = Task.Factory.StartNew(taskDelegate, values);
// 等待任务完成
task.Wait();
}
static void PrintValues(Tuple<int, string> values)
{
int number = values.Item1;
string message = values.Item2;
Console.WriteLine("Number: " + number);
Console.WriteLine("Message: " + message);
}
}
```
在上面的示例中,我们创建了一个`Action<Tuple<int, string>>`委托实例`taskDelegate`,该委托接受一个元组作为参数。然后,我们使用`Tuple.Create`方法创建一个包含两个值的元组,并将其作为参数传递给任务。任务将调用委托,并将元组解包为两个参数传递给`PrintValues`方法。
方法2:使用自定义类或结构
另一种方法是定义一个自定义的类或结构,该类或结构包含多个属性来表示需要传递的参数。然后,您可以使用该类或结构的实例作为参数传递给`Action`委托。以下是一个示例:
```csharp
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
// 创建一个委托实例,并将自定义类的实例作为参数传递给任务
Action<MyParameters> taskDelegate = new Action<MyParameters>(PrintValues);
var parameters = new MyParameters { Number = 10, Message = "Hello" };
Task task = Task.Factory.StartNew(taskDelegate, parameters);
// 等待任务完成
task.Wait();
}
static void PrintValues(MyParameters parameters)
{
int number = parameters.Number;
string message = parameters.Message;
Console.WriteLine("Number: " + number);
Console.WriteLine("Message: " + message);
}
}
class MyParameters
{
public int Number { get; set; }
public string Message { get; set; }
}
```
在上面的示例中,我们定义了一个名为`MyParameters`的类,该类具有`Number`和`Message`属性来表示要传递的参数。我们还创建了一个`Action<MyParameters>`委托实例`taskDelegate`,该委托接受一个`MyParameters`实例作为参数。然后,我们创建了一个`MyParameters`实例并设置其属性值,然后将其作为参数传递给任务。任务将调用委托,并将`MyParameters`实例作为参数传递给`PrintValues`方法。
这些是在C#中使用`Action`委托传递多个参数的两种常见方法。您可以根据您的需求选择适合您的情况的方法。
阅读全文