在我的应用程序中,不同的 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/