爲了簡化代碼,這樣我就可以更好地理解,我想這個遞歸調用轉換成while循環:如何將此遞歸調用重寫爲循環?
function getMusic(IStorageFolder folder) {
int cnt = 0;
var folders = await folder.GetFoldersAsync();
if (folders != null)
foreach (var fol in folders)
await getMusic(fol);
var files = await folder.GetFilesAsync();
foreach (var file in files)
{
MusicProperties musicProperties = await file.Properties.GetMusicPropertiesAsync();
source.Add(new Music("artist", "title", "album");
cnt++;
}
}
在代碼中,source
是Music
類型的一個ObservableCollection(包含三個參數見source.Add...
一行)。
但是,我一直沒有成功。這是我的嘗試,它似乎沒有填充source
列表。
private async Task getMusic(IStorageFolder folder)
{
Stack<StorageFolder> fold = new Stack<StorageFolder>();
int count = 0; int firstTen = 0;
var folders = await folder.GetFoldersAsync();
foreach (var indvFolder in folders)
fold.Push(indvFolder);
while (count < fold.Count)
{
var fol = fold.Pop();
if (firstTen > 9)
break;
var files = await fol.GetFilesAsync();
foreach (var file in files)
{
MusicProperties musicProperties = await file.Properties.GetMusicPropertiesAsync();
source.Add(new Music("artist", "title", "album"));
count++;
}
firstTen++;
}
}
有你在調試代碼中獲得成功..你能理解foreach循環嗎? – MethodMan 2014-10-03 16:46:48
我在代碼中的每一行之後都有一個'Debug.WriteLine',用於檢查變量的值。我已經將它們從這些代碼中取出來保持清潔。 – DemCodeLines 2014-10-03 16:48:25
所以你有什麼問題/問題你知道如何使用調試器的快速觀察 – MethodMan 2014-10-03 16:49:35