2017-09-06 13 views
3

私のアプリケーションでは、異なるキャンバスが「ページ」として格納され、各キャンバスの内容は「セル」として格納されます。私は1つのキャンバスを作る/占めてすべてのセルをロードする際リスト<MyClass>待ち受けタスク

は今、私はこのようにそれらを取得する:これは素晴らしい作品

public Task<List<Cell>> GetCellsAsync(string uPageGUID) 
{ 
    return database.QueryAsync<Cell>("SELECT * FROM cells WHERE cellpageguid = ?", uPageGUID); 
} 

ここで、値 "pageisstartpage"がtrueに設定されているページの "pageguid"を調べたいと思います。

そこで私は次のことをしようとしている:

public Task<string>GetStartPageGUID() 
{ 
    nPages<List<Page>>=database.QueryAsync<Page>("SELECT * FROM pages WHERE pageisstartpage=?", true); 
    return nPages.First.GUID; 
} 

コンパイラは私に語った:

NPAGES現在のコンテキストに存在しません。

私はどこで間違いをしましたかわかりません。あなたは正しくNPAGESを宣言する必要が

答えて

3

NPAGESは現在のコンテキスト内に存在しない、私はミスを犯したところ....私は表示されません。

まず、List<Page>の宣言が後方にあるということです。

nPages<List<Page>>=database.... 

タイプは、最初に変数名が続きます。

List<Page> nPagesTask = database... 

もう一つの解釈は、あなたがジェネリック型を指定したいnPages変数ジェネリック型を持っている可能性があります。コンパイラはこの変数がすでに宣言されているかどうかを調べます。そして明らかにそれは何も見つけることができません。

あなたは次のことを行うことができTask<string>返す非同期メソッドがある場合は二つ目:ここで

public async Task<string>GetStartPageGUID() 
{ 
    Task<List<Page>> nPagesTask = database.QueryAsync<Page>("SELECT * FROM pages WHERE pageisstartpage=?", true); 
    List<Page> npages = await nPagesTask; 
    return nPages.First().GUID; 
} 

QueryAsync方法のsourceです。これは署名です:

ですので、Task<List<T>>を返します。メソッドで異なる戻り値の型が指定されているので、the MSDN exampleで説明されているように、通常のパターンはasyncメソッドで待機してから、メソッドで指定した型を返します。

+0

'await'を使う場合、メソッドを' async'として定義する必要があります。 –

+0

@OfirWinegarten指摘してくれてありがとう。 –

0

List<Page> nPages = database.QueryAsync<Page>("SELECT * FROM pages WHERE pageisstartpage=?", true); 
+0

私にとってはうまくいかない。コンパイラは、「System.Threading.Tasks.Task >型をSystem.Collections.Generic.Listに暗黙的に変換できません。。 – tmighty

+0

コンパイラエラーは、「return nPages.First .GUID; "エラーは@Marcが返信として投稿したコードにあるようです。 – tmighty

関連する問題