Могу ли я случайно вызвать какой-нибудь метод в C # (Unity)? - PullRequest
0 голосов
/ 24 июня 2019

Я хочу вызвать какой-нибудь метод случайным образом.Могу ли я сделать это в C #?

Я пытался в некоторых испытаниях, таких как использование массива, но мне не удалось.

Вот что я пробовал:

public void OnClick()
{

   Example1 a = new Example1();
   Example2 b = new Example2();

   object[] RandomArray = { "a", "b" };

   Random rand = new Random();
   int number = rand.Next(2);
}

public class Example1 : Example_PlayingType2
{
   public void Random1()
   {

   }
}

public class Example2 : Example_PlayingType2
{
   public void Random2()
   {

   }
}

Ответы [ 3 ]

2 голосов
/ 24 июня 2019

Самый простой способ вызова случайной функции - использовать оператор if или switch, например:

class Bar
{
    public void OnClick()
    {
        Foo foo = new Foo();
        Random rand = new Random();
        int number = rand.Next(2);
        if(number == 0)
            foo.Random1();
        if(number == 1)
            foo.Random2();
    }
}

class Foo
{
    public void Random1()
    {

    }
    public void Random2()
    {

    }
}

Помещение обоих случайных методов в один класс имеет смысл, если онисвязанные с этим классом.Конечно, вы можете создать два разных класса и использовать их в операторе if.Все зависит от того, что имеет смысл в вашей архитектуре, поэтому, пожалуйста, отредактируйте мой код в соответствии с вашими потребностями.

Примечание. Как отметил Джонни в своем комментарии, вы захотите переместить Random в поле вкакой-то момент.

1 голос
/ 24 июня 2019

Один возможный подход, немного гибкий, где вы можете зарегистрировать различные действия:

public class Bar
{
    private readonly Random _random = new Random();
    private readonly IDictionary<int, Action> _actions = new Dictionary<int, Action>();

    public void OnClick()
        => _actions[_random.Next(_actions.Count)]?.Invoke();

    public void Register(Action action)
        => _actions[_actions.Count] = action;
}

и тогда вы можете использовать его как:

var b = new Bar();
var foo = new Foo();

b.Register(() => Console.WriteLine("a"));
b.Register(() => Console.WriteLine("b"));
b.Register(foo.Random1);
b.Register(foo.Random2);

for (int i = 0; i < 10; i++)
{
    b.OnClick();
}
0 голосов
/ 24 июня 2019

Другой способ сделать это - использовать Dictionary.Добавьте string и соответствующий method к Dictionary, а затем к пользователю Invoke(), чтобы вызвать их на основе выбранной случайной строки.

...