Основным фактором для меня при принятии этого решения является
Что на самом деле делает Resolve с коллекцией?
Если Resolve не изменяет коллекцию каким-либо образом, я бы предпочел подпись IEnumerable<Func<bool>>
. Он учитывает наибольшее количество вариантов использования и наиболее точно выражает намерение API. Я бы, например, предположил, что что-либо, принимающее более конкретный тип, такой как List<T>
, намеревалось изменить переданную коллекцию. Наблюдение IEnumerable<T>
дает мне некоторую уверенность в том, что коллекция просто перечисляется.
Если Resolve изменяет коллекцию, я бы предпочел, чтобы подпись List<T>
указывала, что мутация действительно возможна. Возможно, я бы создал свободный интерфейс, взяв и вернув IEnumerable<T>
. Который будет во многом зависеть от типа метода Resolve. Трудно обобщать, когда я бы выбрал одно над другим.