如何使用C#中的"param"来运行这个例子呢?

Edw*_*uay 1 c# lambda

我试图理解从RelayCommand示例中获取的这一行中param参数的含义和用法:

return new RelayCommand(param => MessageBox.Show("It worked."));
Run Code Online (Sandbox Code Playgroud)

首先,我理解"param"参数与"params"关键字无关,这是正确的吗?

public int Add(params int[] list)
{
  int sum = 0;
  foreach (int i in list)
    sum += i;
  return sum;
}
Run Code Online (Sandbox Code Playgroud)

其次,我需要添加什么样的委托代码才能使以下示例正常工作?

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";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 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";
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Func<int,int>实际上可能是任何 Func<T,int>(或Func<T,long>),因为你的lambda表达式不使用param任何地方.或者也可以是Expression<Func<int,int>>等等.

我建议你阅读lambda表达式以获取更多细节,例如在以下任何一个SO问题中: