[英]How do I refer to properties of object array inside jagged array in c#?
這個問題可能會有點令人困惑,因為我通常只是開始使用C#和面向對象的編碼,但是我會盡力清楚地解釋事情! 就上下文而言,我正在嘗試為游戲項目制作一個隨機的地牢生成器。
我有鋸齒狀的數組“地牢”,我這樣聲明:
public Level[][,] Dungeon;
要澄清的是,地牢是“關卡”的一維數組。 級別是它自己的對象,它具有一些我在其構造函數中定義的獨特屬性。
每個級別都是“ mazePieces”的2D數組,它們也是對象。
我已經弄清楚了如何引用整個地牢數組來執行諸如查看地牢中有多少級的操作:
Dungeon[x].Length
我還可以在給定級別引用單個mazePieces:
Dungeon[i][x,y].mobAmount
但是,我不知道如何引用整個關卡的屬性。 如果我輸入
Dungeon[i].numberOfRooms
無法將“ numberOfRooms”識別為該級別的屬性。 但是,我發現如果我輸入
Dungeon[i][,].numberOfRooms
我遇到的問題是第二組括號標記有語法錯誤,表示需要一個值。
我可以在第二組括號中添加什么內容,以便我可以參考整個級別,而不僅僅是級別的特定部分?
希望這至少是可以理解的,請讓我知道,我會盡力澄清! 謝謝!
您可以在設計中使用更多的成分。 也許是這樣的:
class Dungeon {
public Level[] Levels { get; private set; }
class Level {
public int NumberOfRooms
{ get { return Maze.GetUpperBound(0) * Maze.GetUpperBound(1); }
public MazePiece[,] Maze { get; private set; }
}
class MazePiece {
private List<Mob> _mobs = new List<Mob>();
public IEnumerable<Mob> Mobs { get { return _mobs; } }
public int MobCount { get { return _mobs.Count; } }
}
class Mob {
public string Name { get; private set; }
}
然后,您可以更自然地引用事物:
var mobsAtTenTenOfLevelThree = dungeon.Levels[2].Maze[9, 9].Mobs;
我要說的是,迷宮應該屬於Level
類的一部分,
所以你會
public Levels[] Dungeon.
另外,您的Level
類將具有索引器:
public SomeReturnType this[int x, int y]
{
get
{
// return maze piece
}
}
在這種情況下,您將可以通過Dungeon[i].numberOfRooms
訪問任何關卡屬性。 而且您仍然可以訪問迷宮碎片,就像您想要的Dungeon[i][x,y].mobAmount
假設numberOfRooms
是MazePiece
的屬性,如果要查找地牢總數 ,可以使用SelectMany
:
int totalRooms = dungeon.SelectMany(p=>p.numberOfRooms).Sum();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.