У меня есть класс FrameSelector , который просто хранит "путь" к фреймам на веб-странице. Этот класс содержит экземпляр FramePath , который является фактическим путем к текущему кадру.
Я создаю экземпляр Элемента , который также содержит поле FramePath, я даю FramePath от FrameSelector до него, когда я использую FrameSelector.SelectDefaultContent (), который по существу очищает FramePath, Element.FramePath имеет 0 сегментов, это не должно быть изменено.
Я предполагаю, что это происходит, потому что Element.FramePath ссылается на FrameSelector .FramePath.
Как мне это преодолеть?
public class Program
{
public static void Run()
{
FrameSelector frameSelector = new FrameSelector();
frameSelector.SelectFrame(0);
Element el = new Element();
el.FramePath = frameSelector.FramePath;
Console.WriteLine(el.FramePath.Segments.Count); // Outputs 1
frameSelector.SelectDefaultContent(); // Resets frameSelector.FramePath
Console.WriteLine(el.FramePath.Segments.Count); // Outputs 0? Why? el.FramePath should not have anything to do with frameSelector.FramePath?
Console.ReadLine();
}
}
class Element
{
public FramePath FramePath;
}
class FrameSelector
{
public FramePath FramePath;
public FrameSelector()
{
FramePath = new FramePath();
}
public void SelectFrame(int id)
{
FramePath.AddSegment($"(//iframe)[{id + 1}]");
}
public void SelectDefaultContent()
{
FramePath.Clear();
}
}
class FramePath
{
public List<string> Segments { get; private set; }
public FramePath()
{
Segments = new List<string>();
}
public void AddSegment(string segment)
{
Segments.Add(segment);
}
public void RemoveLastSegment()
{
Segments.RemoveAt(Segments.Count - 1);
}
public void Clear()
{
Segments.Clear();
}
}