我不是超級確保你在這裏做了什麼,但我覺得foreach
可能是朝正確方向邁出的一步。
首先,我在您提供的代碼中注意到了幾件事情。
string _org = File.ReadAllText("Maps/" + fname + ".txt");
_org.Split(',');
在這裏,您已經攝入了文本文件,並用逗號分隔符將_org
分開。儘管你從未真正將分割數組賦值給一個變量。 _org
仍然是string
,而不是string[]
。
string[] _tmp = new string[_org.Length];
for (int i = 0; i < _org.Length; i++)
{
_tmp[i] = _org[i].ToString();
}
在此塊中,我們已經設置_tmp
如使用_org
長度的字符串數組。在這種情況下,Length
屬性將檢索字符串_org
中的字符數。假設_org
設置爲"foo"
的_tmp
陣列的大小,現在3.(0,1,2)是
你然後繼續加載_tmp
與轉換爲字符串的_org
第n個字符。
在這一點上我們有以下變量。
_org = "foo"
_tmp = {"f","o","o"}
接下來的一部分讓我有些不屑一顧,因爲我無法確定你想要完成什麼。
for (int i = 0; _tmp[i] != "$"; i += 2)
{
mapwidth += 1;
}
你是在一個for循環,直到_tmp[i]
等於"$"
,並且每次使用過的i += 2
循環移動時要添加到2
i
。這個邏輯將打破這個循環,直到達到"$"
,或者如果i
增長超出數組範圍,它將引發異常。
你接下來要添加一個到mapwidth
爲i
每兩個增量在您要添加的_tmp
數組的內容這最後的塊leveldata
for (int i = 0; i < _tmp.Length; i++)
{
leveldata.Add(_tmp[i]);
}
現在的好東西,foreach
。 我已經假設你想將_org設置爲一個數組,並且你希望所有不是「$」的東西。記住,這應該完成你所要做的事情,儘管我不確定第二個循環中遞增2的目的,所以我現在已經離開了它。
static void LoadMap(string fname)
{
string[] _org = File.ReadAllText("Maps/" + fname + ".txt").Split(',');
foreach (var _tmp in _org)
{
if (_tmp != "$")
{
mapwidth += 1;
}
leveldata.Add(_tmp);
}
}
如果你想繼續編碼它始終是一個好主意,讓對基礎知識把握好。
雖然這裏有點過時是一個很好的教程由微軟編程的基礎知識在C#: C# Programmer's Reference
你都知道,你是你的遞增索引2時過,對吧?如果_tmp數組中有5個對象,則第四個循環會出錯,因爲它將是_tmp [0],_tmp [2],_tmp [4],_tmp [6](因此不存在於數組)。 –
'for(int i = 0; _tmp [i]!=「$」; i + = 2)'不檢查'_tmp'上的邊界,因此它很容易讓索引超出邊界,它確實如此。有些東西與你對'_tmp'內容的假設是不正確的,但是你沒有顯示那是什麼,所以我們不能幫助你,而不是說它顯然在這裏。 – Enigmativity
另外,對_org對象的方法String.Split的調用是否有用,它沒有任何用處。 –