c#类内部的元组列表未设置为对象的实例
本文关键字:设置 对象 实例 列表 内部 元组 | 更新日期: 2023-09-27 18:01:52
我试图在自定义类中使用元组列表,该自定义类包装了游戏中多个类的一些方法。就在包装器类的第一个ADD方法在控制台显示"enter ADD METHOD A-1"之后,我得到了一个"对象引用未设置为对象错误实例"。显然,我没有正确设置列表,但我看不出问题在哪里。任何帮助将是感激的,因为我是新的工作与'类'。
// wrappers & classes
KilledActorsWrapper KilledActors = new KilledActorsWrapper();
public class KilledActorsWrapper
#region KilledActorsWrapper class
{
public KilledActorsWrapper()
{ // constructor
if (Type.GetType("KilledActorsWrapper") == null) // check to see if class has been initiated
{ //class with the given name does not exist so instantiate it
List<Tuple<AiActor, AiDamageInitiator, NamedDamageTypes, List<DamagerScore>>> m_KilledActors =
new List<Tuple<AiActor, AiDamageInitiator, NamedDamageTypes, List<DamagerScore>>>();
m_KilledActors.Clear();
ConsoleWriteline("INITIALISED KILLEDACTORS LIST");
}
else
{ // class with the given name exists so show an error, cannot initate the class twice
ColoredConsoleWrite(ConsoleColor.DarkGreen, "INITIALISING KILLEDACTORS LIST FAILED");
throw new Exception("KilledActorsWrapper class already exists. Are you typing to initiate a second instance of this class?");
}
}
public void Add(AiActor killedActor, List<DamagerScore> damages)
{
ConsoleWriteline("ENTERED ADD METHOD A");
Tuple<AiActor, AiDamageInitiator, NamedDamageTypes, List<DamagerScore>> tuple = new Tuple<AiActor, AiDamageInitiator, NamedDamageTypes,
List<DamagerScore>>(killedActor, null, NamedDamageTypes.AirbrakeDriveFailure, damages);
ConsoleWriteline("ENTERED ADD METHOD A-1");
m_KilledActors.Add(tuple);
ConsoleWriteline("ENTERED ADD METHOD A-2");
}
public void Add(AiActor killedActor, AiDamageInitiator initiator, NamedDamageTypes damageType)
{
ConsoleWriteline("ENTERED ADD METHOD B");
Tuple<AiActor, AiDamageInitiator, NamedDamageTypes, List<DamagerScore>> tuple = new Tuple<AiActor, AiDamageInitiator, NamedDamageTypes,
List<DamagerScore>>(killedActor, initiator, damageType, null);
ConsoleWriteline("ENTERED ADD METHOD B-1");
this.m_KilledActors.Add(tuple);
ConsoleWriteline("ENTERED ADD METHOD B-2");
}
public int Count
{
get { return m_KilledActors.Count; }
}
public List<DamagerScore> GetDamagerScore(AiActor killedActor)
{
for (int i = 0; i < m_KilledActors.Count; i++)
{
if (m_KilledActors[i].Item1 == killedActor)
{
return (List<DamagerScore>)m_KilledActors[i].Item1;
}
}
return null;
}
public List<AiDamageInitiator> GetDamageInitiators(AiActor killedActor)
{
List<AiDamageInitiator> damageinitiators = null;
for (int i = 0; i < m_KilledActors.Count; i++)
{
if (m_KilledActors[i].Item1 == killedActor)
{
damageinitiators.Add((AiDamageInitiator)m_KilledActors[i].Item2);
}
}
return damageinitiators;
}
public List<NamedDamageTypes> GetNamedDamageTypes(AiActor actor)
{
List<NamedDamageTypes> nameddamagetypes = null;
for (int i = 0; i < m_KilledActors.Count; i++)
{
if (m_KilledActors[i].Item1 == actor)
{
nameddamagetypes.Add((NamedDamageTypes)m_KilledActors[i].Item3);
}
}
return nameddamagetypes;
}
public void Clear()
{
m_KilledActors.Clear();
}
private List<Tuple<AiActor, AiDamageInitiator, NamedDamageTypes, List<DamagerScore>>> m_KilledActors { get; set; }
}
#endregion
public override void OnActorDead(int missionNumber, string shortName, AiActor actor, List<DamagerScore> damages)
#region process when an actor dies
{
base.OnActorDead(missionNumber, shortName, actor, damages);
KilledActors.Add(actor, damages); // call the wrapper class
}
public override void OnActorDamaged(int missionNumber, string shortName, AiActor actor, AiDamageInitiator initiator, NamedDamageTypes damageType)
{
base.OnActorDamaged(missionNumber, shortName, actor, initiator, damageType);
KilledActors.Add(actor, initiator, damageType); // call the wrapper class
}
m_KilledActors或tuple没有定义。
在这种情况下,错误在构造函数
中List<Tuple<AiActor, AiDamageInitiator, NamedDamageTypes, List<DamagerScore>>> m_KilledActors = new List<Tuple<AiActor, AiDamageInitiator, NamedDamageTypes, List<DamagerScore>>>();
这会导致m_killledactors的定义重复。改成
m_KilledActors = new List<Tuple<AiActor, AiDamageInitiator, NamedDamageTypes, List<DamagerScore>>>();