-
Type: New Feature
-
Resolution: Duplicate
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: BSON
-
None
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) { }
- related to
-
CSHARP-2353 BsonDocument.DeepClone() fails on documents with duplicate element names
- Closed