我想随机调用某种方法。我可以用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()
{
}
}
答案 0 :(得分:2)
调用随机函数最简单的方法是使用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语句中使用它们。这一切都取决于您的体系结构,因此请根据您的需求编辑我的代码。
注意:正如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()
根据所选的随机字符串调用它们。