Может ли список содержать несколько пустых методов? - PullRequest
0 голосов
/ 06 февраля 2011

я пытаюсь создать приложение ConsoleApplication в C #.Сейчас я работаю над системой привязки, которая будет читать ключ, который вы вводите, и выполнять действия, если он связан.

До сих пор я создал структуру Binded, содержащую ConsoleKey и пустое действие (), и яСписок Связывает, чтобы поместить его в аккуратный список.

public struct Binded  
        {   
            public ConsoleKey Key;  
            public void Action()  
            {  
//Whatever  
            }  
        }  
List<Binded> Binds

Затем я просто добавляю ключи, которые хочу использовать, вместе с действием, которое я хочу, чтобы они выполняли.Теперь я могу добавить ключи просто отлично, но мне кажется, что я не могу установить разные действия () для каждой клавиши.Если вы знаете, в чем проблема, или у вас есть лучшее представление о том, как это сделать, я очень хочу это услышать, заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 06 февраля 2011

Прежде всего, я бы рекомендовал использовать класс вместо структуры (или сделать это неизменным).

При этом, вы можете сделать это, определив это для передачи делегата в действие, а не определяя Action в самой структуре / классе.

Например:

public class Binding
{
     public Binding(ConsoleKey key, Action action)
     {
            this.Key = key;
            this.Action = action;
     }
     public ConsoleKey Key { get; private set; }
     public Action Action { get; private set; }
}

Тогда вы бы сделали:

public List<Binding> Binds;

// Later...
Binds.Add( new Binding(ConsoleKey.L, () => 
   {
       // Do something when L is pressed
   });
Binds.Add( new Binding(ConsoleKey.Q, () => 
   {
       // Do something when Q is pressed
   });
2 голосов
/ 06 февраля 2011

Вы должны создать свойство типа Action (это тип делегата)

0 голосов
/ 06 февраля 2011

Нечто подобное должно сработать.

using System;
using System.Collections.Generic;

namespace ActionableList
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Actionable> actionables = new List<Actionable>
            {
                new Actionable
                    {
                        Key = ConsoleKey.UpArrow,
                        Action = ConsoleKeyActions.UpArrow
                    },
                new Actionable
                {
                    Key = ConsoleKey.DownArrow,
                    Action = ConsoleKeyActions.DownArrow
                },
                new Actionable
                {
                    Key = ConsoleKey.RightArrow,
                    Action = ConsoleKeyActions.RightArrow
                },
                new Actionable
                {
                    Key = ConsoleKey.UpArrow,
                    Action = ConsoleKeyActions.UpArrow
                }
            };

            actionables.ForEach(a => a.Action());

            Console.ReadLine();
        }
    }

    public class Actionable
    {
        public ConsoleKey Key { get; set; }
        public Action Action { get; set; }
    }

    public static class ConsoleKeyActions
    {
        public static void UpArrow()
        {
            Console.WriteLine("Up Arrow.");
        }

        public static void DownArrow()
        {
            Console.WriteLine("Down Arrow.");
        }

        public static void LeftArrow()
        {
            Console.WriteLine("Left Arrow.");
        }

        public static void RightArrow()
        {
            Console.WriteLine("Right Arrow.");
        }
    }
}
...