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

Popular posts from this blog

How do I check if an insert was successful with MySQLdb in Python? -

delphi - blogger via idHTTP : error 400 bad request -

postgresql - ERROR: operator is not unique: unknown + unknown -