2013-04-17 7 views
1

我正在嘗試編寫一個函數,它將返回一個文件列表。所以這裏有一個源代碼:使用C#(Windows-Store應用程序)獲取文件列表。使用函數的問題

public async IReadOnlyList<StorageFile> GetFiles() 
    { 
     StorageFolder folder = await KnownFolders.PicturesLibrary.GetFolderAsync("folder N1"); 
     if (folder != null) 
     { 
      IReadOnlyList<StorageFile> fList = await folder.GetFilesAsync(); 
      return fList; 
     } 
    } 

但是爲什麼它不起作用?錯誤消息是「無法將IReadOnlyList轉換爲StorageFile」。怎麼了?我的fList變量與函數頭部中的類型相同。

+0

如何使用var而不是'IReadOnlyList '。讓編譯器設置正確的類型。 – I4V

回答

0

您的列表'fList'正在使用StorageFile作爲它的類型 - 它應該使用類型IReadOnlyList。請嘗試以下操作:

List<IReadOnlyList> fList = await folder.GetFilesAsync(); 

爲改變返回類型的方法:

public async List<IReadOnlyList> GetFiles() 
{ 
    ... 
} 
3

異步方法返回Task<T>,所以改變你的功能是這樣的。

public async Task<IReadOnlyList<StorageFile>> GetFiles() 
{ 
    StorageFolder folder = await KnownFolders.PicturesLibrary.GetFolderAsync("folder N1"); 
    if (folder != null) 
     return await folder.GetFilesAsync(); 
    else 
     return null; 
} 

GetFilesAsync stops working

+0

如何從任務中提取IReadOnlyList?我需要IReadOnlyList作爲這個函數的輸出。 – splash27

+0

你不必從任務中提取,像'var Files = await GetFiles();','Files'將使用方法'IReadOnlyList ',你檢查了[GetFilesAsync停止工作](http:// stackoverflow。 com/questions/13930113/getfilesasync-stops-working)? – Xyroid

2

正如@Xyroid說,你需要使用任務>的返回類型,因爲異步方法的返回類型必須是void,任務或任務。通過代碼@Xyroid發佈。你可以得到這樣的文件:

IReadOnlyList<StorageFile> fileList = await GetFiles(); 
int count = fileList.Count; 
相關問題