MongoDb.Bson(官方)内部的AsXXX和ToXXX有什么区别

时间:2015-05-09 00:17:36

标签: c# .net mongodb mongodb-.net-driver

我只是想知道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。

所以我的问题是何时使用一个而不是另一个?他们如何在内部工作?

1 个答案:

答案 0 :(得分:1)

区别在于转换类型。

AsXXX(有点像C#中的as)只是一个演员。它会尝试将基础BsonValue转换为XXX类型和。如果实例实际上是正确类型,则转换有效。如果没有,您将获得InvalidCastException

ToXXX不是演员而是转换。它包含一些关于如何从一个BsonValue转换为另一个age并且不应该抛出异常的逻辑,除非转换失败。

在您的示例中,BsonInt32AsBoolean,因此BsonBoolean在尝试将其投放到ToBoolean时失败,但所有false都返回0 1}}如果值为true,则为{{1}},否则无法失败。