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