c# - Using generic func signature -
c# - Using generic func signature -
i implement simple (testing purposes only) in memory repository below. interfaces implements generic. 1 of methods "delete" used in sample code below.
the cast of predicate throws exception. how can implement deleted method correctly?
public class inmemoryreportingrepository : ireportingrepository { private readonly list<idto> m_dtos; public inmemoryreportingrepository() { m_dtos = new list<idto>(); } // ommitted stuff public void delete<tentity>(expression<func<tentity, bool>> predicate) tentity : class, idto { var delete = m_dtos.firstordefault((func<idto, bool>) predicate.compile()); m_dtos.remove(delete); } }
try following:
public void delete<tentity>(expression<func<tentity, bool>> predicate) tentity : class, idto { var compiled = predicate.compile(); var todelete = m_dtos.firstordefault(dto => (dto tentity) && compiled((tentity)dto)); m_dtos.remove(delete); }
func<tentity, bool>
, func<idto, bool>
different types, why cast failed.
however, recommend using class level generics in memory info store:
public class datastore<tentity> : idatastore<tentity> tentity : class, idto { private readonly list<tentity> m_dtos = new list<tentity>(); ... public void delete(func<tentity, bool> predicate) { var todelete = m_dtos.firstordefault(predicate); m_dtos.remove(todelete); } }
c# linq generics
Comments
Post a Comment