运算符 '!=' 不能应用于类型为 'Task' 和 'int' 的操作数
Posted
技术标签:
【中文标题】运算符 \'!=\' 不能应用于类型为 \'Task\' 和 \'int\' 的操作数【英文标题】:Operator '!=' cannot be applied to operands of type 'Task' and 'int'运算符 '!=' 不能应用于类型为 'Task' 和 'int' 的操作数 【发布时间】:2016-07-02 05:03:24 【问题描述】:最近我开始使用 Xamarin 创建 android 应用程序。我尝试使用 SQLite 创建一个小型本地数据库。我使用了Xamarin documentation website的以下教程。
不幸的是,我收到了一个错误:
错误 CS0019:运算符“!=”不能应用于“任务”和“整数”类型的操作数 (CS0019)
我的代码如下:
private string createDatabase(string path)
try
var connection = new SQLiteAsyncConnection(path);
connection.CreateTableAsync<Person>();
return "Database created";
catch (SQLiteException ex)
return ex.Message;
private string insertUpdateData(Person data, string path)
try
var db = new SQLiteAsyncConnection(path);
if ( db.InsertAsync(data) != 0)
db.UpdateAsync(data);
return "Single data file inserted or updated";
catch (SQLiteException ex)
return ex.Message;
private int findNumberRecords(string path)
try
var db = new SQLiteConnection(path);
// this counts all records in the database, it can be slow depending on the size of the database
var count = db.ExecuteScalar<int>("SELECT Count(*) FROM Person");
// for a non-parameterless query
// var count = db.ExecuteScalar<int>("SELECT Count(*) FROM Person WHERE FirstName="Amy");
return count;
catch (SQLiteException ex)
return -1;
Person 类如下:
using System;
using SQLite;
namespace HelloWorld
public class Person
[PrimaryKey, AutoIncrement]
public int ID get; set;
public string FullName get; set;
public string CarLicense get; set;
public override string ToString()
return string.Format("[Person: ID=0, FullName=1, CarLicense=2]", ID, FullName, CarLicense);
谁能帮我解决这个错误?
【问题讨论】:
【参考方案1】:你可以这样做:
if ( (await db.InsertAsync(data)) != 0)
另请参阅this answer,了解为什么await
通常比使用.Result
更受欢迎。
【讨论】:
【参考方案2】:这告诉您需要比较结果,而不是任务。请更新这一行:
if ( db.InsertAsync(data) != 0)
到
if ( db.InsertAsync(data).Result != 0)
【讨论】:
谢谢,这是错误。而且我也必须使用await,对吧? 不,因为我相信等待发生在 InsertAsync 中。为此,您需要在自己的异步方法中调用它并等待响应,然后返回 int 进行比较。 这是非常危险的,可能会导致死锁。使用await
!【参考方案3】:
您应该等待结果,而不是使用可能导致死锁的Result
:
if (await db.InsertAsync(data) != 0)
await db.UpdateAsync(data);
这要求你的方法也是异步的,所以签名应该是:
private async Task<string> insertUpdateData(...)
【讨论】:
@没有编号的用户 - 这应该被标记为下一个有相同问题的开发者的最佳答案。 让OP选择最佳答案@Mr.B【参考方案4】:您可以使用异步,如果您希望 innsertUpdateData 是异步的,则等待。
private async Task<string> insertUpdateData(Person data, string path)
try
var db = new SQLiteAsyncConnection(path);
if ( 0 != await db.InsertAsync(data))
await db.UpdateAsync(data);
return "Single data file inserted or updated";
catch (SQLiteException ex)
return ex.Message;
【讨论】:
【参考方案5】:您需要在 db.InsertAsync(data) 上添加 .result
【讨论】:
以上是关于运算符 '!=' 不能应用于类型为 'Task' 和 'int' 的操作数的主要内容,如果未能解决你的问题,请参考以下文章
在swift中连接:二进制运算符'+'不能应用于'String'和'AnyObject'类型的操作数
运算符 '>' 不能应用于类型 'string' 和 'number' 错误
运算符'=='不能应用于'char'和'string'类型的操作数
二元运算符'+'不能应用于'String'和'() -> String'类型的操作数