以下のように、単純な(テスト目的のみ)をメモリリポジトリに実装したいと考えています。実装するインターフェースは一般的です。以下のサンプルコードでは、「削除」メソッドの1つが使用されています。汎用ファンクションシグネチャを使用する
述語のキャストによって例外がスローされます。削除されたメソッドを正しく実装するにはどうすればよいですか?
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) where TEntity : class, IDto
{
var delete = m_dtos.FirstOrDefault((Func<IDto, bool>) predicate.Compile());
m_dtos.Remove(delete);
}
}
なぜ 'public void Delete(式>述語)'を使用しないのですか? –
私のインターフェイスは以下のようになっています。その理由は... パブリックインターフェイスIUpdateModel { 保存(T dto)T:class、IDto; void更新(Tエンティティ)T:class、IDto; void (式>述語)ここでT:class、IDto; void (Tエンティティ)T:class、IDto; }パブリックインターフェイスIUpdateModel T:IDto {ボイド保存(TのDTO)。 void Update(Tエンティティ)。 void Delete(式>述語); void削除(Tエンティティ)。 } –