2011-06-14 3 views
1

Я хочу написать метод с подписями Expression<Func<T, bool>> Foo<T>(). Мой класс U наследуется от T. Я хочу включить в этот делегат U-специфическую обработку. Проблема в том, что T не может быть неявно преобразован в U. Есть ли способ получить доступ к U-специфическим свойствам в этом методе?Функционал производного типа в делегате

Усложнение: У меня также есть тип V: T, который я хочу обрабатывать, поэтому я не могу просто воспользоваться преимуществами, заменив T на U в сигнатуре.

+0

Похоже, вам понадобится переместить некоторые необходимые функции в типе 'U' на базовый тип' T'. –

+0

К сожалению, я не могу из-за того, что столбцы с нулевым дискриминатором должны отображаться на дочерних элементах в EF: -/ – kappasims

+0

Почему вы не можете явно преобразовать 'T' в' U' в свой метод? – svick

ответ

0

В конце концов я использовал отдельные перегрузки:(), (myVar), где T: U и (myvar, myvar2), где T: V. Это сделало трюк, и мне повезло, потому что каждый параметр является значением приложения, которое соответствует с собственностью объекта.

0

Простым подходом является определение интерфейса, который как T, так и U наследует (использует) от него.

+0

Разве это не привело бы к тому, что мне все же пришлось бы неявно преобразовать в U, чтобы получить доступ к полям U? – kappasims

+1

Я немного смущен, T означает один из ваших объектов или он стоит как общий объект? –

+0

T - класс высшего уровня. Я хочу иметь доступ к U-специфическим свойствам метода. Если я добавлю интерфейс, мне все равно придется отбрасывать T в U, чтобы получить доступ к свойствам U, или мне придется сделать T реализовать общее свойство U, которое является излишним, потому что T не должно иметь свойств U. – kappasims