Создание пользовательских синтаксических ошибок вместо использования ошибок / исключений таймера выполнения - PullRequest
0 голосов
/ 24 сентября 2018

Я хочу проверить уравнение перед компиляцией моего кода и предотвратить его успешную компиляцию.Так что еще в редакторе.Вот пример того, что я хочу сделать:

public static Matrix operator + (Matrix A, Matrix B)
    {
        if (A.length != B.length || A.width != B.width)
            throw new InvalidOperationException("Matrix A must be the same size as matrix B");

        // Do things
    }

, если я напишу C = A + B; и скомпилирую, это вызовет исключение.Я скорее хочу сделать проверку перед компиляцией и показать сообщение об ошибке в консоли.

1 Ответ

0 голосов
/ 24 сентября 2018

Невозможно достичь того, что вы хотите.Предположим, вы разрешаете пользователю вводить матрицу с произвольными размерами.Тогда компилятор уже выполнил свою работу и не может знать размеры, которые выбирает пользователь.Таким образом, компилятор не может проверить, если две матрицы имеют совместимые измерения.Вы можете написать анализатор, который выполняет некоторый статический анализ кода и сообщает о несоответствиях измерений, но он не найдет все, и я сомневаюсь, что стоит написать его.

Единственный способ принудить поведение компиляторомсоздать отдельный тип для каждого измерения.Но я настоятельно рекомендую вам не делать этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...