Аннотированные ошибки компиляции:
error CS1061: 'Result' does not contain a definition for 'status'
error CS1061: 'Param' does not contain a definition for 'ReservationID'
Код, использующий аргументы универсального типа, может быть скомпилирован, только если компилятору известен член универсального типа. Он не знает, что аргумент типа Result имеет член status. Конечно, нет, если вы вызываете TestFn<object, object>()
.
Вам нужно будет использовать ограничение, чтобы сделать эту работу. Вы уже делаете, но new () недостаточно силен. Что-то вроде «где Result: IResult», например, где IResult является типом интерфейса, который имеет свойство status. Или базовый класс. Теперь компилятор может быть на 100% уверен, что любой разрешенный конкретный экземпляр универсального метода будет выполняться без ошибок во время выполнения. Поскольку его можно скомпилировать только тогда, когда он вызывается с типом, обладающим свойством «status».
Все то же самое относится к аргументу типа Param. Полезность универсального метода здесь быстро исчезает, когда вы делаете это, это не правильное использование. Если вы не можете использовать IResult, как вы можете IEnumerable.