Требуется ли ключевое слово unchecked в VB.NET-версии этого оператора C #? - PullRequest
0 голосов
/ 12 мая 2018

Я конвертирую в VB.NET, который не предоставляет ключевое слово unchecked. Но в этом утверждении нет необходимости:

const int dwAccess = unchecked((int)0xC0000000);

У меня есть два замечания здесь:

  1. dwAccess объявлено как константа
  2. Присвоенное значение находится в пределах диапазона System.Int32

Учитывая это, будет ли безопасно просто пойти с этим:

Const dwAccess As Integer = &HC0000000

Используется в этом контексте:

[DllImport("Kernel32", CharSet = CharSet.Auto, SetLastError = true)]
private static extern SafeFileHandle CreateFile(string lpFileName, int dwAccess, int dwShareMode,
                                                IntPtr securityAttrs, int dwCreationDisposition,
                                                int dwFlagsAndAttributes, IntPtr hTemplateFile);

Пояснение: Этот вопрос не о том, необходимо ли ключевое слово unchecked в C #. Ясно, что это так. Речь идет о том, исключает ли отсутствие ключевого слова в VB.NET успешное преобразование оператора.

Ответы [ 2 ]

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

Да. Следующее хорошо:

Const dwAccess As Integer = &HC0000000

В VB.Net нет ключевого слова unchecked, но есть флаг компиляции -removeintchecks 1 , который приведет к тому, что целочисленное переполнение не будет проверяться для всей программы.

Если строка C #:

const int dwAccess = unchecked((int)0xC0000000);

тогда перевод VB.Net будет выглядеть так:

Const dwAccess As Integer = &HC0000000

Поскольку 0xC0000000 находится в диапазоне uint, но не int, ключевое слово unchecked в C # используется для преобразования значения в формат int. В VB.Net преобразование из шестнадцатеричной константы происходит автоматически.

0 голосов
/ 12 мая 2018

Ответ - да.Это избыточно и может быть удалено.

не проверено (C # Reference)

Ключевое слово unchecked используется для подавления проверки переполнения для целочисленных арифметических операций ипреобразования.


Обновите, этот ответ должен быть уточнен.

Если исходный код VB.NET не проверен, то эквивалентный код C # будет функционировать так же, как непроверенныйтаким же образом.Оба переполнятся, и оба дадут одинаковые результаты.

...