我试图理解从RelayCommand示例中获取的 param 参数的含义和用法:
return new RelayCommand(param => MessageBox.Show("It worked."));
首先,我了解“param”参数与“params”关键字无关,这是正确的吗?
public int Add(params int[] list)
{
int sum = 0;
foreach (int i in list)
sum += i;
return sum;
}
其次,我必须添加什么类型的代理代码才能使以下示例正常工作?
using System;
using System.Collections.Generic;
namespace TestParam222
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("The total is {0}.", Tools.GetTest(param => 23));
Console.ReadLine();
}
}
class Tools
{
public static string GetTest(List<int> integers)
{
return "ok";
}
}
}
答案 0 :(得分:6)
param
不是关键字。它是样本中lambda表达式的参数。您需要使您的方法采用委托或表达式树,例如
using System;
using System.Collections.Generic;
namespace TestParam222
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("The total is {0}.", Tools.GetTest(param => 23));
Console.ReadLine();
}
}
class Tools
{
public static string GetTest(Func<int, int> integers)
{
return "ok";
}
}
}
Func<int,int>
实际上可能是任何 Func<T,int>
(或Func<T,long>
等),因为您的lambda表达式在任何地方都不使用param
。或者它可以是Expression<Func<int,int>>
等。
我建议你阅读lambda表达式以获取更多细节,例如在任何这些SO问题中: