Несколько дней назад мне нужно было переключить bool, и я закончил так:
IsVisible = !IsVisible;
Я обнаружил, что это самый простой способ архивировать это ежедневно.
Но прежде чем делать, как в примере выше, я попробовал несколько разных способов.
В основном об использовании метода расширения.
Который, по моему мнению, сделал бы это еще проще или, по крайней мере, меньше букв для написания.
IsVisible.toggle();
Но поскольку логическое значение является типом значения, логическое значение, которое отправляется в метод расширения, является копией исходного логического объекта, а не ссылочным типом.
public static void Toggle(this boolean value)
{
value = !value;
}
Что будет делать то, что мне нужно, но поскольку переключаемое логическое значение является копией оригинального логического значения, изменение не применяется к оригиналу.
Я попытался поместить ключевое слово ref перед логическим значением, но это не скомпилировалось.
И я до сих пор не нашел причину этого не компилирования, разве это не идеальная функциональность для методов расширения?
public static void Toggle(this ref boolean value)
Я даже пытался привести логическое значение к объекту, который в моей голове превратил бы его в ссылочный тип, и тогда он больше не был бы копией, и изменение было бы передано обратно.
Это тоже не сработало.
Таким образом, мой вопрос: возможно ли сделать расширение, передающее изменения назад, или другой способ сделать его еще проще, чем уже есть?
Я знаю, что вполне возможно, что не получится проще или логичнее, чем в верхнем примере, но вы никогда не знаете:)
Заранее спасибо.