Как я могу получить этот пример, используя «param» в C # для работы? - PullRequest
1 голос
/ 16 апреля 2009

Я пытаюсь понять значение и использование параметра param в этой строке, взятой из примера RelayCommand:

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 Ответ

6 голосов
/ 16 апреля 2009

param не является ключевым словом. Это параметр для лямбда-выражения в вашем образце. Вам нужно заставить свой метод принимать делегат или дерево выражений, например,

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> и т. Д.), Поскольку ваше лямбда-выражение нигде не использует param В качестве альтернативы это может быть Expression<Func<int,int>> и т. Д.

Я предлагаю вам ознакомиться с лямбда-выражениями для более подробной информации, например, по любому из следующих вопросов SO:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...