首頁>Program>source

所以我有一个BsonDocument b(假設它具有FirstName,LastName,Age),您可以將其作為b [" FirstName"]等訪問。

如果我尝試執行b [" asdfasdf"](当然不存在),而不是返迴null,則会使應用程式出錯.正確的檢查方法是什麼? 我真的需要尝試/捕获吗?

最新回復
  • 13天前
    1 #

    還有一个過載可以让您提供預設值:

    BsonDocument document;
    var firstName = (string) document["FirstName", null];
    // or
    var firstName = (string) document["FirstName", "N/A"];
    

    当您要做的只是用預設值替換缺少的值時,這比使用"包含"更為方便。

    Edit:   从2.0.1版本開始,不推荐使用 GetValue

    var firstName = document.GetValue("FirstName", new BsonString(string.Empty)).AsString;
    

  • 13天前
    2 #

    尝試使用Contains方法:

    var b = new BsonDocument();
    var exists = b.Contains("asdfasdf");
    

  • 13天前
    3 #

    對Robert答案的更新,使用C#2.0驅動程式的正確語法是:

    var firstName = report.GetValue("FirstName", null);
    

  • 13天前
    4 #

    您可以使用:

    var GoodItems = Query.Exists("FirstName");
    

    然後查詢

    People.Find(GoodItems);
    

    這樣,您將仅获得定義了"名字"的專案.

  • 13天前
    5 #

    對於C#驅動程式版本2,仅檢查该欄位的存在可能還不够.该行:

    var firstName = report.GetValue("FirstName", null);
    
    如果FirstName實際上在資料庫中為null,則

    將返迴一个BsonNull物件,而實際上您想获取一个字元串。 在一行代碼中考虑這一點的一種方法是:

    BsonDocument document;
    string firstName = ((Func<BsonDocument, string>)(d => { var v = d.GetValue("FirstName", null); return v.IsBsonNull ? null : v.AsString; }))(document);
    

  • ruby on rails:多次部署後的Heroku子弹大小
  • node.js:在Q中鏈接任意數量的Promise