Details
-
New Feature
-
Resolution: Unresolved
-
Major - P3
-
None
-
None
-
None
-
Minor Change
Description
The following code fails:
var doc = new BsonDocument() { AllowDuplicateNames = true };
doc.Add("x", 1);
doc.Add("x", 2);
var doc2 = new BsonDocument(doc); // throws
This is because the parameter is treated as an IEnumerable<BsonElement>. This can be fixed by adding a new constructor:
/// <summary>
/// Initializes a new instance of the BsonDocument by coping elements from another BsonDocument.
/// </summary>
/// <param name="document">The document whose elements will be copied</param>
public BsonDocument(BsonDocument document)
{
if (document == null)
{
throw new ArgumentNullException("document");
}
_allowDuplicateNames = document.AllowDuplicateNames;
AddRange(document);
}
This could be ambiguous if somebody tried to pass a RawBsonDocument or LazyBsonDocument, so two additional constructors may be useful:
/// <summary>
/// Initializes a new instance of the BsonDocument by coping elements from a LazyBsonDocument.
/// </summary>
/// <param name="document">The document whose elements will be copied</param>
public BsonDocument(LazyBsonDocument document) : this((BsonDocument)document) { }
/// <summary>
/// Initializes a new instance of the BsonDocument by coping elements from a RawBsonDocument.
/// </summary>
/// <param name="document">The document whose elements will be copied</param>
public BsonDocument(RawBsonDocument document) : this((BsonDocument)document) { }