【发布时间】:2020-08-09 15:46:29
【问题描述】:
我刚刚开始学习 C#。我正在为 Rimworld 制作游戏模组,无法修改典当代码。显然,任何链接的对象都可能为空。有没有比我做的更好的方法来摆脱这种方法?
谢谢。
private void cleanseParadoxicalMemories(Pawn pawn, Dictionary<string, string> knownPawnIDs)
{
if (pawn.needs == null || pawn.needs.mood == null || pawn.needs.mood.thoughts == null || pawn.needs.mood.thoughts.memories == null)
{
return;
}
// Remove any crazy-making memories from a now-invalid timeline due to traveling across an Einstein-Rosen bridge
// (basically, selective amnesia about everyone not going with us.)
foreach (var paradox in pawn.needs.mood.thoughts.memories.Memories.ToList())
{
if (paradox.otherPawn != null)
{
pawn.needs.mood.thoughts.memories.RemoveMemory(paradox);
}
}
}
【问题讨论】:
-
我认为你可以在这里使用
?.,至少在 if 中。如果其中任何一个是,pawn.needs?.mood?.thoughts?.memories将为空。如果我没记错的话foreach不喜欢空值,所以不能把整个东西放在里面 -
或
foreach(var paradox in (pawn?.needs?.mood?.thoughts?.memories?.Memories ?? Enumerable.Empty<ParadoxType>()).ToList())
标签: c#