Я часто сталкивался с потребностью сохранить универсальный объект параметра в состояние отображения в базовом классе.
public abstract class BaseListControl<ListType,KeyType,ParameterType>
: UserControl
where ListType : BaseListType
&& ParameterType : BaseParameterType, new
{
private const string viewStateFilterKey = "FilterKey";
protected ParameterType Filters
{
get
{
if (ViewState[viewStateFilterKey] == null)
ViewState[viewStateFilterKey]= new ParameterType();
return ViewState[viewStateFilterKey] as ParameterType;
}
set
{
ViewState[viewStateFilterKey] = value;
}
}
}
Использование:
private void SomeEventHappened(object sender, EventArgs e)
{
Filters.SomeValue = SomeControl.SelectedValue;
}
private void TimeToFetchSomeData()
{
GridView.DataSource = Repository.GetList(Filters);
}
Этот небольшой прием с, "где ParameterType: BaseParameterType, новый", то, что заставляет его действительно работать.
С этим свойством в моем базовом классе, я могу автоматизировать обработку подкачки страниц, устанавливания значений фильтра для фильтрации gridview, сделать сортировку действительно легкой, и т.д.
я действительно просто говорю, что дженерики могут быть чрезвычайно мощным зверем в неправильных руках.
Не могли бы вы просто указать "v7b {0}" в поле "Формат номера сборки"?