Есть ли способ настроить компилятор VS2008 C# для предоставления предупреждения для кода как это:
Int64 x = 123456789000;
Int32 y = (Int32)x;
Все необходимые преобразования могут привести к данным потеря. Цель приведения состоит в том, чтобы сообщить компилятору: «Я делаю здесь что-то опасное, что вы не можете проанализировать, но я знаю, что делаю». Поскольку вся цель приведения состоит в том, чтобы обработать случай, когда компилятор недостаточно умен для анализа, ожидать, что компилятор проанализирует его, чтобы выдать предупреждение, кажется бессмысленным.
Таким образом, ваше предложение состоит в том, чтобы сделать предупреждение для каждого необходимого преобразования , что кажется контрпродуктивным.
Замечу, что неявное преобразование в некоторых редких случаях также может вызвать потерю данных. Неявные преобразования могут потерять биты точности ; что сохраняет неявное преобразование, так это величина .
перейдите к просмотру свойств проекта, щелкните вкладку «Сборка», нажмите кнопку «Дополнительно» в правом нижнем углу, установите флажок «Проверить наличие флажок арифметического переполнения / потери значимости "
Компилятор не может сделать это во время компиляции, но вы можете настроить его для выдачи исключений во время выполнения,
В свойствах проекта-> Сборка-> Дополнительно-> Проверить переполнение \ underflow
{{ 1}}Весь смысл явного приведения состоит в том, чтобы сказать: «Я беру на себя ответственность за проблему, пожалуйста, просто сделайте это».
В вашем тривиальном случае , возможно, компилятору будет легко выяснить, что значение не помещается в Int32, и, таким образом, выдать ваше предупреждение.
Однако как насчет этого:
Int64 x = CallSomeMethod();
Int32 y = (Int32)x;
Как он может вас об этом предупредить? Должен ли он:
Лучшее, на что вы можете здесь надеяться, - это провести проверку во время выполнения или что-то подобное, компилятор не может предотвратить вас от всего, что может пойти не так.
Я согласен с явным объяснением Лассе В. Карлсена приведения в соответствие.
Одним из возможных решений для вас в этом случае является фактическое удаление явных приведений (поиск и замена их) в вашем коде, если вы действительно хотите получать «предупреждения», когда существует подобное приведение. Это будет означать, что вам придется вручную просмотреть все произошедшие приведения (в списке предупреждений) и определить, действительны они или нет. поэтому ваш код будет выглядеть так:
Int64 x = 123456789000;
Int32 y = x;