我只是想知道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:无法转换类型' MongoDB.Bson.BsonInt32'的对象输入' MongoDB.Bson.BsonBoolean'
ToBoolean()
返回true。
所以我的问题是何时使用一个而不是另一个?他们如何在内部工作?
答案 0 :(得分:1)
区别在于转换类型。
AsXXX(有点像C#中的as
)只是一个演员。它会尝试将基础BsonValue
转换为XXX类型和。如果实例实际上是正确类型,则转换有效。如果没有,您将获得InvalidCastException
。
ToXXX不是演员而是转换。它包含一些关于如何从一个BsonValue
转换为另一个age
并且不应该抛出异常的逻辑,除非转换失败。
在您的示例中,BsonInt32
是AsBoolean
,因此BsonBoolean
在尝试将其投放到ToBoolean
时失败,但所有false
都返回0
1}}如果值为true
,则为{{1}},否则无法失败。