我正在使用 Xamarin
开发一个 iOS 应用程序。我正在使用 sqlite-net ORM 与我的数据库进行交互。
对于 Integer 列,ORM 返回一个 Int32
值。但是,此列中的值可以是 NULL
。我注意到,如果是这种情况,它将返回 0 而不是 NULL
,因为不可能将 int 设置为 NULL
。
例如,使用以下代码:
public class Client
{
public Client ()
{
}
[PrimaryKey, Column("ID")]
public string ID{ get; set;}
public string FirstName{ get; set;}
public string LastName{ get; set;}
public int Age{ get; set;}
}
如果 ID 正确,但 FirstName、LastName 和 Age 设置为 NULL
,则返回的对象的 FirstName 和 LastName 字段将为 null,这是合乎逻辑的。但是年龄将被设置为零。
所以我不知道该值是 NULL
还是 0。有没有办法区分这些情况?
最佳答案
理想情况下,您的 Client 类会告诉我们“Age”是一个不可为 null 的属性。但这里需要认识到的重要一点是,作为整数的“Age”实际上是一种值类型。
值类型不能包含空值。除非结合“?”或已经指出的“可空<>”。
在 .NET 中,字符串实际上不是值类型而是引用类型。
很狡猾,这就是为什么您在字符串属性上得到空值但在整数属性上却没有。
另一件需要注意的事情是,SQLite.NET 默认创建可为空的列,为了强制一个不可为空的列是添加属性:[NotNullAttribute] 在您的属性之上。
允许“Age”作为 null 从数据库返回的唯一原因是编写以下属性:
public class Client
{
public Client ()
{
}
public Nullable<int> Age{ get; set;}
//public int? Age { get; set; }
}
关于c# - 如何区分 sqlite-net 中的 NULL 数据和 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37186279/