и я не очень понимаю схуяли
Это ковариантность и контравариантность. Когда делаешь Action, который принимает стринг, ты легко можешь вызвать Action, который принимает object
Когда тебе IEnumerable<object>.Current возвращает object, этот object мог быть преобразован от более конкретного типа.