在C#中创建随机子类的对象

时间:2017-07-23 17:01:25

标签: c# arrays random

我对C#很陌生,所以请原谅我的初学者问题。我已经搜索过了,但还没有找到我想要的解决方案。

我有一个抽象类和几个子类。我们只是说子类1到子类9。

我现在要做的是从随机子类生成一个对象。实际上,我希望有一些列表,包括预选这些类。喜欢:List1包括子类1,3,4和6,List2包括1,2,5,6和9等等。所以我可以随时说:给我一个List2的随机对象。

我的想法是生成数组并将这些子类放入其中,然后选择数组的随机元素。但这对我没有用。我还没弄明白如何用对象填充数组,所以我不确定这是不可能的,或者我还没有找到正确的语法。任何人都可以告诉我如何生成这些列表吗?

因为我已经在问:是否有一种简单的方法可以让列表中的对象出现不同的概率?

编辑: 实际上我正在尝试理解如何在不同的情况下处理这样的事情。

例如:我有一个抽象类 items 。我可能有不同的子类,如药水 dagger 滚动等等。现在我可能想在战斗后产生一些随机战利品,也许是两个随机物品。但我不想丢弃任何物品。例如,我不想让熊掉下匕首或卷轴,但更多的东西就像熊皮和洞穴里留下的一些骨头。所以我需要不同的可能战利品清单,我可以从中生成随机丢弃。

我该怎么做?就像我说的那样,我试图把类放到一个数组中,但我还没弄清楚如何做到这一点。甚至不确定如何做到这一点是正确的想法。

我想到了如何将特定对象放入数组或列表中。但是我不想生成20个对象来随机选择其中的两个并破坏剩下的对象。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以factory method使用table of methods模式。

private static Func<Item>[] tableOfMethods =
{
     () => new Potion()
}

public static Item GetRandomItem() 
{
    var randomIndex = generate index here....
    return tableOfMethods[randomIndex]();
}

P.S。数组创建的语法在这里可能是错误的,从移动设备写入。

相关问题