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 转换为另一个的逻辑,除非转换失败,否则不应抛出异常。

在您的示例中,ageBsonInt32,因此 AsBoolean 失败,因为它试图将其转换为 BsonBoolean,但 ToBoolean 所做的只是 return false 如果值为 0true 否则它不会失败。