2016-05-25 9 views
4

IsOfTypeが項目のメソッドとして受け入れられないため、次のコードはコンパイルされません。文書番号:IStorageItemをStorageFileにキャストできません

このメソッドが正常に完了すると、指定したファイルまたはフォルダを表すIStorageItem が返されます。指定したファイルまたは フォルダが見つからない場合、このメソッドは 例外を発生させる代わりにnullを返します。

返されたアイテムを処理するには、 IStorageItemインターフェイスのIsOfTypeメソッドを呼び出し、アイテムがファイルか フォルダかどうかを判断します。その後、アイテムをStorageFolderまたはStorageFileにキャストします。

private async void RestoreData(string fileName) 
    { 
     StorageFolder folder = ApplicationData.Current.LocalFolder; 
     var item = folder.TryGetItemAsync(fileName); 
     if (item == null) 
     { 
      existingData = false; 
     } 
     if (item.IsOfType(StorageItemTypes.File)) 
     { 
      await ReadDataAsync(item as StorageFile); 
      existingData = true; 
     } 
     existingData = false; 
    } 

答えて

3

あなたは非同期メソッドの結果を待つawaitキーワードが欠落している - この場合には、あなたがこのような何か書く必要があります。

var item = await folder.TryGetItemAsync(fileName); 

の中のに対し、そのitemおかげでタイプIStorageItemでありますあなたのコードはIAsyncOperation<IStorageItem>でした。

conventionの場合、すべての非同期メソッドにはAsyncという接尾辞が付いていますので、検査するには結果を待つ必要があります。

ヒント:varキーワードにマウスを置くほとんどのIDEで

は、変数の型が表示されます - それははるかに簡単にエラーを見つけることができます。

+0

Doh。私はそのタイプがIAsyncOperation であることに気付きましたが、これは待っているということが分からなかったのです。 – Robert

+0

私は助けてもらえました。非同期はC#のかなり重要な部分です。私はそれらについて読むことをお勧めします - [MSDN page](https://msdn.microsoft.com/en-us/library/mt674882.aspx)は基本をカバーしています。 –

関連する問題