public interface IEntity {}
public interface IEntityEvaluatorInput<out TEntity> where TEntity : IEntity
public TEntity Entity { get; }
public delegate bool EntityEvaluator<in TEvaluatorInput>(TEvaluatorInput input) where TEvaluatorInput: IEntityEvaluatorInput<IEntity>;
public class RowEditingConfigEvaluatorInput<TEntity> : IEntityEvaluatorInput<TEntity> where TEntity : IEntity
public TEntity Entity { get; }
public RowEditingConfigEvaluatorInput(TEntity entity)
public class MyEntity: IEntity
public string MyProperty {get;set;}
public static void Main()
EntityEvaluator<IEntityEvaluatorInput<IEntity>> evaluator1 = delegate(IEntityEvaluatorInput<IEntity> input) { return ((MyEntity)input.Entity).MyProperty != null; };
EntityEvaluator<IEntityEvaluatorInput<IEntity>> evaluator2 = delegate(IEntityEvaluatorInput<MyEntity> input) { return input.Entity.MyProperty != null; };
EntityEvaluator<IEntityEvaluatorInput<IEntity>> evaluator3 = delegate(RowEditingConfigEvaluatorInput<MyEntity> input) { return input.Entity.MyProperty != null; };