Если вы скажете ему создать новый объект, он создаст новый объект. Я не думаю, что есть оптимизация, которая бы заменила вызов конструктора приведением и присваиванием - компилятор должен слишком много знать о том, что делает конструктор, чтобы иметь возможность оптимизировать его таким образом.
Технически, вы можете сделать это сами - _context = (List<HtmlNode>)nodes;
- это то, что вы хотите, чтобы компилятор делал. Или лучше _context = nodes as List<HtmlNode> ?? new List<HtmlNode>(nodes)
.
Но в любом случае список может быть изменен за пределами вашего класса, поэтому вы должны быть уверены, что он не вызовет неожиданного поведения.
Пока пахнет преждевременной оптимизацией. Ваш код выглядит хорошо, и я бы ничего не изменил, пока не увидел бы здесь реальную проблему производительности.