none
Перебор всех значений. RRS feed

  • Вопрос

  • Есть метод он принимает параметры

    М(П1)

    М(П1, П2)

    М(П1, П2, П3)

    И так далее.

    Мне нужно оптимизировать параметры для этого метода. Я хочу начать с прямого перебора. К примеру устанавливаю что П1 у меня будет от 1 до 10, П2 от 1 до 100, П3 от 1 одного до 1000

    Проблема только в том, что этот метод находится в плагине который пишут другие люди, и я не смогу узнать заранее сколького параметров будет принимать метод. То есть один плагин может принимать один параметр М(П1)  а другой шесть М(П1, П2, П3, П4, П5, П6). Допустим в интерфейсе к этим плагинам будет свойство с количеством параметров и все параметры будут иметь значение int. Остаётся один вопрос как составить цикл для перебора значений, если я не буду знать заранее количество праметров. То есть такое явно не прокатит.

    for (int x = 0; x <= parameter1; x++)
    {
        for (int y = 0; y <= parameter2; y++)
        {
            for (int z = 0; z <= parameter3; z++)
            {
    
            }
    
        }
    }

    • Перемещено Siddharth Chavan 1 октября 2010 г. 21:42 MSDN Forums Consolidation (От:Visual C#)
    14 марта 2010 г. 20:45

Ответы

  • С помощью отражения вы можете получить полную информацию о параметрах метода в типе, получить их число и т.д. Пример получения информации о параметрах.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Reflection;
    
    namespace ConsoleApplication4
    {
        class Program
        {
            static void Main(string[] args)
            {
                Type t = typeof(Math);
                var methods = t.GetMethods();
                foreach (var method in methods)
                {
    
    
                    Console.WriteLine(method.Name + "  has  "  + method.GetParameters().Length.ToString() + " parameters");
                    foreach (var parameter in method.GetParameters())
                    {
                        Console.Write("\t\tName: " + parameter.Name + "  Position: " + parameter.Position + "  Type: " + parameter.ParameterType + "\r\n");
    
                    }
                    Console.WriteLine("--------------------");
                }
            }
        }
    }
    
    • Помечено в качестве ответа I.Vorontsov 17 марта 2010 г. 7:59
    15 марта 2010 г. 8:27