У меня есть код, написанный в VB, который читается следующим образом:
Return (Not (crc32Result))
Я пытаюсь преобразовать его в С#, и это то, что у меня есть:
return (!(crc32Result));
Однако я получаю ошибку компилятора:
Сообщение об ошибке компилятора: CS0023: Operator '!' не может применяться к операнду типа 'uint'
Есть ли другой оператор, который мне нужно использовать вместо этого?
Спасибо!
Похоже на то, что вы пытаетесь сделать, это обратить вспять бит crc32result. Если это так, вам нужен оператор тильды ~.
return (~crc32Result);
Ссылка этот вопрос.
Попробуйте следующее:
return crc32Result == 0;
Или немного лучше понять, что я делаю:
return !(crc32Result != 0);
Что делает второй пример, это преобразовать его в логическое значение директором "0 - false, отличное от нуля - true". Поэтому, если он не равен нулю, он вернет true. И затем я использую '!' оператора для выполнения операции "нет". Код Visual Basic, который вы дали, по-видимому, делает неявную часть (как и C/С++), но С# и Java не будут.
Но это так, если и ТОЛЬКО, если вы ищете логический тип возврата из этой функции. Если вы делаете бит-мутную инверсию, вам необходимо следующее:
return (~crc32Result);
В этом случае оператор '~' выполняет преобразование в другой бит-шаблон.
В С#, bang (!) используется для переброса булевой переменной. Вы пытаетесь обработать uInt выше как логическое или выполнить другое изменение (возможно, изменение всех двоичных цифр)?
Я бы предложил один из них - это решение, которое вы ищете:
return (!(bool)crc32Result); // treating as bool (0 = false, anything else is true)
return (~crc32Result); //bitwise flipping for all