Я хочу использовать информацию, скрывающуюся с установленным аксессором свойства.Поэтому я хочу активировать установленный аксессор, не добавляя в него никакого значения.В set acessor происходит инициализация значения, например:
/// <summary>
/// load short ref controls
/// </summary>
/// <param name="reset">(re)set cached list</param>
public List<ShortRef_Control> ShortRefControls
{
// (re)set cached list
set
{
tableDictionary["refcontrols"] =
(from src in dataContext.ShortRef_Controls select src).ToList();
}
// return cached list
get
{
return tableDictionary.Get<List<ShortRef_Control>>("refcontrols");
}
}
Вопрос : Почему я хочу это сделать? Ответ : Две причины: 1. Я также хочу сбросить это, я использую кэшированный список таблицы со строками из базы данных.Когда эта таблица обновляется, я хочу обновить кэшированный список.Я не хочу использовать трудно читаемые сеттеры для этого и поэтому хочу скрыть инициализацию сеттера. 2. Я использую имена клавиш, тогда возможны ошибки при наборе, держать эти имена вместе - отличное решение. Что работает? Возможно, не очень удачное решение: ShortRefControls = null
В языке C # чего-то не хватает? Или я (не) использую свойства таким образом.ShortRefControls = null
работает, но если другой коллега поддерживает этот код, у него может сложиться впечатление, что для значения ShortRefControls установлено значение null.
Лучшее решение, которое я могу придумать, - не использовать свойства для этого иИспользуйте отдельную функцию GetShortRefControls () и SetShortRefControls ().
ОБНОВЛЕНИЕ : Я (ах ... мой коллега ;-) придумал это:
/// <summary>
/// load short ref controls
/// </summary>
private void SetShortRefControls() => ShortRefControls = (from src in dataContext.ShortRef_Controls select src).ToList();
Эта частная функция используется в качестве установочного значения.В некотором смысле это ведет себя как псевдоним или обертка для сеттера. Что с этим не так? Это дополнительная функция, которая на самом деле не нужна.
C # версия x? Странно думать, что ShortRefControls =<
инициализируется с помощьюнет значения, это способ справиться с этим в будущей версии C #.Символы = <</strong> могут отличаться от любых символов, что означает самостоятельную инициализацию.Чтобы позволить установщику вести себя так, как следует установщику, = говорит, что ShortRefControls должен получить значение, <</strong> говорит, что оно будет инициализировано само по себе и не будет передано как значение.
ОБНОВЛЕНИЕ 2 : После долгих раздумий я придумал следующее:
/// <summary>
/// load short ref controls
/// </summary>
/// <param name="set">(re)set content cached list</param>
public List<ShortRef_Control> ShortRefControlList(bool set = false)
{
// set or reset cache
if (set)
tableDictionary["refcontrols"] =
(from src in dataContext.ShortRef_Controls select src).ToList();
// always return content of cache
return tableDictionary.Get<List<ShortRef_Control>>("refcontrols");
}
Я добавил к методу метод List, так что мы знаем, что для ясности на список ссылаются.Это не то, что я действительно хочу, и неэффективно, потому что он всегда возвращает значение, поэтому я вижу приведенный выше код в качестве обходного пути.
То, что я пробовал и не работало: ShortRefControls = SelfInitialising.Это может быть хорошим решением.SelfInitialising - это переменная с нулевым значением.Это проясняет, какой будет смысл.Проблема в том, что у меня есть не только ShortRefControls в tableDictionary, но и намного больше данных с разными типами, так что это не поможет.
Что мне действительно нужно: самоинициализирующийся установщик
Так есть ли лучшая альтернатива для решения этой проблемы или хороший совет для команды Visual Studio по расширению языка?