Я придерживаюсь рекомендаций: никогда не следует выбрасывать из неявного преобразования.
Я определенно не стал бы предоставлять неявное преобразование в этом случае. Мне кажется неправильным даже идея явного приведения: Foo x = (Foo) fooCollection
просто не кажется правильной.
Почему бы вам просто не позволить вызывающему коду позаботиться о преобразовании из FooCollection
в Foo
? Код будет намного более интуитивно понятным для всех:
Foo a = fooCollection[0];
Foo b = fooCollection.First();
Foo c = fooCollection.FirstOrDefault();
// etc
Это явно не нормально. Никогда не используйте исключения для реализации логики!
Вы можете использовать Linq-Statement FooCollection.FirstOrDefault ()
, который даст null или первый элемент.
Неявная копия, которая работает, только если в коллекции всего 1 элемент? На самом деле, в большинстве случаев это не работает?
Я бы никогда не сделал это преобразование неявным. Придерживайтесь явного. Если программист, использующий вашу функцию, хочет иметь единственный элемент, он должен просто сообщить вашему классу.
Приведение должно быть явным. Было бы очень странно иметь возможность назначить FooCollection
объекту Foo
, по крайней мере, без приведения типов.
При этом приведение типов IMHO - не лучший способ сделать этот. Даже если вы откажетесь от этого, я буду использовать функцию, потому что даже если у вас нет контроля над реализацией этих классов, вы можете по крайней мере добавить методы расширения, такие как Foo ToFoo (эта коллекция FooCollection)
для выполнения работы.