return this.lastIndexOf(str) + str.length == this.length;
не работает в случае, где длина исходной строки является той меньше, чем длина строки поиска и строка поиска не найдены:
lastIndexOf возвращается-1, тогда Вы добавляете длину строки поиска, и Вас оставляют с длиной исходной строки.
А возможная фиксация
return this.length >= str.length && this.lastIndexOf(str) + str.length == this.length
Примитивные типы неизменяемы. Вам придется написать свой вызывающий код следующим образом:
IsVisible = IsVisible.Toggle();
Это лучшее, что вы можете сделать с помощью методов расширения. Ни в коем случае.
в сторону: разве метод расширения не будет невероятно накладными расходами для такой простой вещи, как переключение типа bool?