从可等待任务中获取 List<MyClass>

3
在我的应用程序中,不同的画布被存储为“页面”,每个画布的内容被存储为“单元格”。 现在当我想要加载所有占据/组成一个画布的单元格时,我会像这样检索它们:
public Task<List<Cell>> GetCellsAsync(string uPageGUID)
{
    return database.QueryAsync<Cell>("SELECT * FROM cells WHERE cellpageguid = ?", uPageGUID);
}

这很好用。

现在我想要找出将"value" 设置为 "pageisstartpage" 的页面的 "pageguid"。

因此,我正在尝试以下操作:

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

编译器告诉我:
nPages 在当前上下文中不存在。
我不知道我犯了什么错误。
2个回答

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方法有关的源代码。以下是该方法的签名:
public Task<List<T>> QueryAsync<T> (string query, params object[] args)

因此,它返回一个Task<List<T>>。由于您的方法指定了不同的返回类型,通常的模式是在async方法中等待它,如MSDN示例所述,然后返回您在方法中指定的类型。


如果您使用 await,则需要将该方法定义为 async - Ofir Winegarten

0

你必须正确声明 nPages:

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

对我来说那行不通。编译器显示“无法将类型System.Threading.Tasks.Task<System.Collections.Generic.List<MyApp..Page>>隐式转换为System.Collections.Generic.List<MyApp.Page>”。 - tmighty
即使没有"return nPages.First.GUID;"这一行,编译器错误仍然会出现,说明错误在@Marc作为回复发布的代码中。 - tmighty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接