我可以在C#(Unity)中随机调用某些方法吗?

时间:2019-06-24 06:44:11

标签: c# random methods

我想随机调用某种方法。我可以用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 个答案:

答案 0 :(得分:2)

调用随机函数最简单的方法是使用ifswitch语句,如下所示:

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语句中使用它们。这一切都取决于您的体系结构,因此请根据您的需求编辑我的代码。

注意:正如Johnny在他的评论中提到的那样,您可能希望将Random移到某个字段中。

答案 1 :(得分:1)

一种可能的方法,有点灵活,您可以在其中注册不同的操作:

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();
}

答案 2 :(得分:0)

另一种方法是使用Dictionary。将string和相应的method添加到Dictionary,然后用户Invoke()根据所选的随机字符串调用它们。