我有一个List<>充满了一个名为'生物','生物'包含列表<>它充满了一个名为' AttackMethod'的单独的Class对象。 AttackMethod类的内部是一个名为' RollDamage'的公共int方法。它接受在AttackMethod内部分配的变量并计算它们以返回int。
我遇到的问题是从我的列表中调用RollDamage方法<>生物每个生物都有一个List<>其中的AttackMethods。我想要做的是访问每个生物的攻击方法列表<>并激活RollDamage方法。缩写代码如下:
private static void MobAttacksPlayer(Objects.Creature inMob)
{
MobDamage = (int)inMob.creatureAttacks.RollDamage();
Console.Write(MobDamage);
}
creatureAttacks是List<>的公共变量在Creature类中。公众以前受过保护,上面的(int)铸造是我尝试的其他东西,但是没有用。
public List<AttackMethod> creatureAttacks = new List<AttackMethod>();
我确定它是一件我能忽视的简单事物;我对C#很新,但想尝试创建小Roguelike来学习。正如我在这里写的那样,我已经在右边列出了类似的问题,但没有成功。以下是我的AttackMethod类(修剪为仅包含构造函数和我尝试使用的RollDamage方法)
public class AttackMethod
{
protected string aFlag;
protected string eFlag;
protected int numberDice;
protected int numberSides;
public AttackMethod() { }
public AttackMethod(string inaFlag, string ineFlag, int inNumdie,
int inNumSides)
{
aFlag = inaFlag;
eFlag = ineFlag;
numberDice = inNumdie;
numberSides = inNumSides;
}
~AttackMethod() { }
public int RollDamage()
{
DiceBag.Dice newDie = new DiceBag.Dice();
int ret = newDie.any(numberDice, numberSides);
return ret;
}
}
DiceBag只是我的模具滚筒,没有任何错误。此外,我不知道它是否有所作为,但这是一个控制台程序,而不是Windows窗体程序。我使用的是Visual C#Express 2010.请提前感谢您的帮助。
错误2&#39; System.Collections.Generic.List&#39;不包含&#39; RollDamage&#39;的定义没有扩展方法&#39; RollDamage&#39;接受类型&#39; System.Collections.Generic.List&#39;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)C:\ Users \ Carl.Prichard \ Documents \ Visual Studio 2010 \ Projects \ MyRogueLike \ MyRogueLike \ Program.cs 1130 60 MyRogueLike
通常当我收到此错误时,将其转换为我要解析的变量类型
答案 0 :(得分:2)
RollDamage方法损坏是AttackMethod类的成员。 inMob.creatureAttacks是一个列表,即List<AttackMethod>
。此列表不会公开AttackMethod类中的任何方法,它只是公开List上的方法。您需要遍历列表以获取对每个生物攻击方法的引用。即...
foreach(AttackMethod attack in inMob.creatureAttacks)
{
var mobDamage = (int)attack.RollDamage();
Console.Write(mobDamage);
}
答案 1 :(得分:0)
您要做的是在列表的每个成员(RollDamage
)上调用方法(creatureAttacks
)。
你不能直接这样做&#34; on&#34;列表。您可以使用foreach
遍历列表并一次一个地处理其中的每个对象。也许你想要这样的东西:
private static void MobAttacksPlayer(Objects.Creature inMob)
{
var totalDamage = 0;
foreach (var attack in inMob.creatureAttacks)
{
var attackDamage = attack.RollDamage();
Console.Write(attackDamage);
totalDamage += attackDamage;
}
Console.Write(totalDamage);
}
如果您只想总结攻击并且不关心各个值,则可以使用LINQ缩短代码(确保文件顶部的using System.Linq
位于您的使用位置):
var totalDamage = inMob.creatureAttacks.Sum(t => t.RollDamage());