2016-01-15 2 views
2

Я хочу создать базовый объект, который я могу использовать с несколькими системами доступа к данным. Аргумент generic type представляет тип свойства.Ограничить тип к любому экземпляру общего типа в C#

public interface IEntity<T> { 
    public T Id {get; set;} 
} 

Я хочу, чтобы иметь возможность использовать этот интерфейс в качестве универсального типа ограничения без необходимости указывать параметр типа в общем методе.

public void Read<T>(Expression<Func<T, bool>> expression) where T : IEntity<**any type**> 

Возможно ли это? Если нет, то каковы альтернативы?

ответ

7

Вы можете это сделать. Добавьте второй тип типового типа:

public void Read<T, U>(Expression<Func<T, bool>> expression) where T : IEntity<U> 
+0

Примечание (не критика ответа), что вы все равно должны определить 'U' при вызове метода, то есть:' Read (а => верно), '' предполагая лицо: IEntity ' – Rob

2

Используйте ограничение для этого параметра типа и укажите оба типа в объявлении. Это подталкивает решение о том, что происходит с сетью.

public void Read<T,TOther>(Expression<Func<T, bool>> expression) where T : IEntity<TOther> 
Смежные вопросы