public static IStatusItemCommand ToCreateOrMergePatchStatusItem <TCreateStatusItem, TMergePatchStatusItem>(this IStatusItemState state) where TCreateStatusItem : ICreateStatusItem, new() where TMergePatchStatusItem : IMergePatchStatusItem, new() { bool bUnsaved = ((IStatusItemState)state).IsUnsaved; if (bUnsaved) { return(state.ToCreateStatusItem <TCreateStatusItem>()); } else { return(state.ToMergePatchStatusItem <TMergePatchStatusItem>()); } }