public static TWidget TryGetWidget <TWidget>(WidgetsListControlViewModel widgetsViewModel, out bool shouldReload, TWidget defaultValue = default(TWidget)) where TWidget : IWidgetItemModel, new() { bool canAddWidget = widgetsViewModel.CanAddWidget(typeof(TWidget).Name); bool isWidgetSettingEnabled = TryGetIsWidgetSettingEnabled <TWidget>(); if (canAddWidget && isWidgetSettingEnabled) { shouldReload = true; return(new TWidget()); } else if (!canAddWidget && !isWidgetSettingEnabled) // The widgets exists but the setting has been disabled for it { // Remove the widget widgetsViewModel.RemoveWidget <TWidget>(); shouldReload = false; return(default(TWidget)); } else if (!isWidgetSettingEnabled) { shouldReload = false; return(default(TWidget)); } shouldReload = EqualityComparer <TWidget> .Default.Equals(defaultValue, default(TWidget)); return(defaultValue); }