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

时间:2009-04-16 13:37:43

标签: c# lambda

我试图理解从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";
        }
    }
}

1 个答案:

答案 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问题中: