我是编程新手,因此有一个相当简单的问题。我想应该可以显示50次两张不同的图片,让我们说两个不同的彩色圆圈,按照随机顺序持续一秒或直到用户按下某个键但我不知道如何开始。有一个简单的方法吗?
也许从一系列动作(显示圆圈a或显示圆圈b)开始,然后随机选择其中一个,如下面的修改代码,来自另一个问题:
class Program
{ static void Main(string[] args)
{
List<Action> actions = new List<Action>();
actions.Add(() => Program.circleA());
actions.Add(() => Program.circleB());
Random random = new Random();
int selectedAction = random.Next(0, actions.Count()); //what does this line do?
actions[selectedAction].Invoke(); // and this one?
}
之后我必须定义Program.circleA和Program.circleB做什么,对吗?
我应该在循环中实现这个吗?如果是,我如何指定在达到突破标准之前每个圆圈必须显示50次?
我在互联网上搜索类似的问题,但无法找到解决方案,或者可能只是无法理解它们,这就是为什么我会问你们男孩和女孩:)
答案 0 :(得分:0)
如果我理解你的问题,你的问题基本上是&#34;如何调用随机行动/方法?&#34;和#34;我这样做的逻辑是否合适?&#34;。
从第二个开始(因为它更容易),答案将与这个简单问题的答案相同:&#34;它是否正在做它的工作?&#34;。这意味着如果你的逻辑表现得像你想要的那样,答案是肯定的。如果它没有,那么
第一个...它有点棘手,因为你可以有许多不同的解决方案。您可以使用Reflection
,Action
,Func
,自定义delegate
s ...
(恕我直言)所以&#34;轻松&#34;方式(如果你有很多方法)将使用反射和自定义属性,如下所示:
public class RandomCircleMethodAttribute : Attribute
{
public RandomCircleMethodAttribute() : base() { }
}
然后将此Attribute
分配给您要调用的方法。然后使用Reflection
只需获取MethodInfo
指向这些方法并按如下方式调用它们:
public class RandomCircleMethods
{
[RandomCircleMethod]
public void circleA() { //.. your logic here
}
[RandomCircleMethod]
public void circleB() { //.. your logic here
}
// add as many as you want
}
然后在您的EntryPoint(Main(string[] args)
)内:
List<MethodInfo> methods = typeof(RandomCircleMethods).GetMethods().Where(method => Attribute.IsDefined(method, typeof(RandomCircleMethod))).ToList();
int selectedAction = new Random().Next(0, methods.Count);
methods[selectedAction].Invoke(new RandomCircleMethods(), null);
这样您就不必创建Action
列表。但这与你目前的工作方式一样好。
我会坚持你现在的逻辑,因为它使用Reflection
时不那么容易混淆。