Я хочу сохранить BsonDocument в переменной и временной переменной. Который должен использовать другую память, и изменение в одном не влияет на другое. Как мне этого добиться. когда я меняю временную переменную, исходная переменная также изменилась. Используя С# dotnet core 3.1
var obj1 = await db.GetBuildingName(); //from db bsondocuments
var obj2 = await db.HierarchyCatalogues();//from db list of bsondocuments
var tempobj = new BsonDocument();
tempobj = obj1;
BsonArray catlist = new BsonArray();
foreach (var term in obj2) { catlist.Add(term); }
tempobj.Add(new BsonElement("metadata", catlist));
когда я добавляю метаданные в tempobject, это также отражается в obj1
я. ссылка obj1 из базы данных. так что я не могу вызвать снова
Если вы используете MongoDB, попробуйте obj1.Clone()
или obj1.DeepClone()
@phuzi, ты прав. спасибо за ответ
Как и все ссылочные типы, вы должны клонировать объект, если хотите иметь копию экземпляра. BsonDocument
реализовано два метода клонирования: Clone (мелкое клонирование) и DeepClone. Я думаю, вы ищете решение DeepClone:
using MongoDB.Bson;
var tempobj = obj1.DeepClone().ToBsonDocument();
после глубокого клонирования он меняется на bsonvalue
@junealex В пакете ToBsonDocument
есть метод расширения MongoDB.Bson
, который может преобразовывать любые объекты в BsonDocument
. Но ладно, добавлю к ответу
Потому что
tempobj
иobj1
относятся к одному и тому же экземпляруBsonDocument
.tempobj.Add()
обновляет экземпляр, на который ссылаются иtempobj
, иobj1
. Вам нужно будет сделать клонobj1