С MSDN :
Устраняя ненужные преобразования, неявные преобразования могут улучшить читаемость исходного кода. Однако, поскольку неявные преобразования могут происходить без указания их программистом, необходимо позаботиться о том, чтобы избежать неприятных сюрпризов. В общем случае операторы неявного преобразования никогда не должны генерировать исключения и никогда не терять информацию, чтобы их можно было безопасно использовать без ведома программиста. Если оператор преобразования не может соответствовать этим критериям, он должен быть помечен как явный.
Хотя я не согласен с какой-либо конкретной точкой и согласен с тем, что все это очень хорошо, есть ли когда-нибудь причина, которая достаточно велика, чтобы оправдать нарушение части о неявных преобразованиях, не вызывающих исключения?
Частный случай, который я имею перед собой, - это тот случай, когда:
- У меня есть функция, которая возвращает пользовательский объект коллекции (мы назовем его
FooCollection
).
- Эта функция может возвращать коллекции с одним элементом, и по исходному коду можно определить, произойдет ли это . (под этим я подразумеваю только вызов функции, а не саму функцию)
- Если это произойдет, то вероятность того, что пользователь захочет этот отдельный элемент, составляет 99,9%, а не коллекции с одним элементом.
Теперь я спрашиваю, стоит ли включать неявное преобразование из FooCollection
=> Foo
, чтобы скрыть эту маленькую деталь реализации, но это преобразование будет работать, только если в коллекции есть один элемент.
Можно ли в этом случае бросить Exception
? Или я должен использовать явное приведение вместо? Любые другие идеи о том, как я мог бы справиться с этим (нет, из-за деталей реализации я не могу просто использовать две функции)?
РЕДАКТИРОВАТЬ: Я считаю, что стоит отметить, что FooCollection
не реализует никаких интерфейсов или фактически расширяет Collection
, как может означать название, поэтому ответы на основе LINQ бесполезны. Кроме того, хотя в коллекции реализован числовой индекс, это не самый интуитивно понятный способ работы с коллекцией, поскольку в основном он использует именованный индекс.