在我的应用程序中,不同的 Canvas 存储为“页面”,每个 Canvas 的内容存储为“单元格”。

现在,当我想加载占据/构成一张 Canvas 的所有单元格时,我会像这样检索它们:

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;
}

编译器告诉我:



我看不出我哪里出错了。

最佳答案



首先要提到的是 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。这是签名:
public Task<List<T>> QueryAsync<T> (string query, params object[] args)

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

关于c# - List<MyClass> 来自可等待的任务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46068865/

10-12 07:40
查看更多