Сначала убедитесь, что список содержит достаточно элементов:
if(itemsToTake + 1 > List.Count)
return List.ToList(); //copy the list
Первый индекс, который вы хотите взять (без учета границ последовательности):
var firstIndex = selectedIndex - itemsToTake / 2;
Соответствующим последним индексом будет firstIndex + n
.
Затем убедитесь, что диапазон действителен
if(firstIndex < 0)
firstIndex = 0;
if(firstIndex + nitemsToTake >= List.Count)
firstIndex = List.Count - 1 - itemsToTake ;
И, наконец, сделайте, как вы пытались:
return List.Skip(firstIndex).Take(itemsToTake + 1).ToList();