У меня есть рутина
public void SomeRoutine(List<IFormattable> list) { ... }
Затем я пытаюсь вызвать эту процедуру
List<Guid>list = new List<Guid>();
list.Add(Guid.NewGuid());
SomeRoutine(list);
И он завершается с ошибкой во время компиляции. System.Guid реализует IFormattable, но я получаю ошибку
не может конвертировать из
'System.Collections.Generic.List'
в
'System.Collections.Generic.List'
ПРИМЕЧАНИЕ: вы получите ту же ошибку, если вы просто используете массив Guids. Дженерики это НЕ причина ....
Но! Учитывая это
public void SomeRoutine2(IFormattable obj) { ... }
и это
Guid a = Guid.NewGuid();
SomeRoutine2(a);
Это компилируется! Вопрос в том, ПОЧЕМУ? Почему я могу передать объект Guid (который реализует IFormattable) в подпрограмму, которая принимает объект IFormattable, но когда я пытаюсь развернуть его в коллекцию (общий список, или массив, или что-нибудь еще), я получаю ошибка преобразования?
У меня было чертовски много времени, чтобы найти ответ, и я подумал, что это будет лучшее место, чтобы пойти.