Чтобы получить копию класса, вам нужно создать новый экземпляр этого класса. Вы можете сделать это с помощью конструктора, как это. Также я изменил все ваши поля на свойства.
public class TextClass
{
// You don't need to set the list externally, just get it to add/remove/iterate
public List<string> Words { get; } = new List<string>();
public string Text { get; set; }
public string Name { get; set; }
public string Date { get; set; }
public string Id { get; set; }
public TestClass() { } // default constructor
public TestClass(TestClass from) // copy constructor
{
Text = from.Text;
Name = from.Name;
Date = from.Date;
Id = from.Id;
Words.AddRange(from.Words); // this ensures a deep copy of the list
}
}
Тогда вы можете сделать
TextClass textCopy = new TextClass(text);
И textCopy
будет истинной глубокой копией text
, и когда вы назначите что-то на textCopy.Text
, и это не повлияет text.Text
.
В качестве альтернативы вы можете создать метод копирования, подобный этому
public class TextClass
{
// You don't need to set the list externally, just get it to add/remove/iterate
public List<string> Words { get; } = new List<string>();
public string Text { get; set; }
public string Name { get; set; }
public string Date { get; set; }
public string Id { get; set; }
public TestClass Copy()
{
var copy = new TestClass()
{
Text = this.Text;
Name = this.Name;
Date = this.Date;
Id = this.Id;
}
copy.Words.AddRange(this.Words); // this ensures a deep copy of the list
return copy;
}
}
И использовать его вот так
TextClass textCopy = text.Copy();