Я реализую частный случай неизменяемого словаря, который для удобства реализует IEnumerable<KeyValuePair<Foo, Bar>>
. Операции, которые обычно изменяют словарь, вместо этого должны возвращать новый экземпляр.
Все идет нормально. Но когда я пытаюсь написать модульный тест в стиле Fluent для класса, я обнаруживаю, что ни одна из двух библиотек Fluent Assert, которые я пробовал (Should и Fluent Assertions) поддерживают операцию NotBeSameAs()
для объектов, которые реализуют IEnumerable
-- нет, если вы сначала не примените их к Object
.
Когда я впервые столкнулся с этим, с Должен, я предположил, что это была просто дыра в структуре, но когда я увидел, что у Fluent Asserts есть такая же дыра, я подумал, что (поскольку я относительный новичок в C #) Я мог упустить что-то концептуальное в отношении коллекций C# — автор книги Должен подразумевать это, когда Я подал заявку.
Очевидно, есть и другие способы проверить это - привести к Object
и использовать NotBeSameAs()
, просто использовать Object.ReferenceEquals
, что угодно, но если есть веская причина не делать этого, я хотел бы знать, что это такое.
Object
, зачем вам нужно приводить? - person Jodrell   schedule 13.03.2013IEnumerable
, который, в отличие от менее конкретного дляObject
, не не поддерживает операциюNotBeSameAs()
. - person David Moles   schedule 13.03.2013