MongoDb.Bson(官方)内部的 AsXXX 和 ToXXX 有什么区别
What is the difference between AsXXX and ToXXX in MongoDb.Bson (official) internally
我只是想知道 AsXXX 和 ToXXX 操作在 MongoDb 中是如何工作的。比如我有下面这样的操作
var person = new BsonDocument();
person.Add("age", 32);
BsonValue age= person["age"];
Console.WriteLine(age.AsBoolean); //throws an exception
Console.WriteLine(age.ToBoolean()); //True
AsBoolean()
抛出异常,具体为:
System.InvalidCastException : Unable to cast object of type 'MongoDB.Bson.BsonInt32' to type 'MongoDB.Bson.BsonBoolean'
而 ToBoolean()
returns 正确。
所以我的问题是什么时候使用一个而不是另一个?他们如何在内部工作?
区别在于转换类型。
AsXXX(有点像 C# 中的 as
)只是一个转换。它尝试将基数 BsonValue
转换为 XXX 类型并且。如果实例实际上是正确的类型,则转换有效。如果没有,您将像以前一样获得 InvalidCastException
。
ToXXX 不是转换而是转换。它包含一些关于如何从一个 BsonValue
转换为另一个的逻辑,除非转换失败,否则不应抛出异常。
在您的示例中,age
是 BsonInt32
,因此 AsBoolean
失败,因为它试图将其转换为 BsonBoolean
,但 ToBoolean
所做的只是 return false
如果值为 0
和 true
否则它不会失败。
我只是想知道 AsXXX 和 ToXXX 操作在 MongoDb 中是如何工作的。比如我有下面这样的操作
var person = new BsonDocument();
person.Add("age", 32);
BsonValue age= person["age"];
Console.WriteLine(age.AsBoolean); //throws an exception
Console.WriteLine(age.ToBoolean()); //True
AsBoolean()
抛出异常,具体为:
System.InvalidCastException : Unable to cast object of type 'MongoDB.Bson.BsonInt32' to type 'MongoDB.Bson.BsonBoolean'
而 ToBoolean()
returns 正确。
所以我的问题是什么时候使用一个而不是另一个?他们如何在内部工作?
区别在于转换类型。
AsXXX(有点像 C# 中的 as
)只是一个转换。它尝试将基数 BsonValue
转换为 XXX 类型并且。如果实例实际上是正确的类型,则转换有效。如果没有,您将像以前一样获得 InvalidCastException
。
ToXXX 不是转换而是转换。它包含一些关于如何从一个 BsonValue
转换为另一个的逻辑,除非转换失败,否则不应抛出异常。
在您的示例中,age
是 BsonInt32
,因此 AsBoolean
失败,因为它试图将其转换为 BsonBoolean
,但 ToBoolean
所做的只是 return false
如果值为 0
和 true
否则它不会失败。