Я писал довольно низкоуровневое приложение на C #, которое использует много байтовых шортов и битовых манипуляций. Одна вещь, которую я заметил, это то, что C # не любит делать битовые манипуляции и использовать логические операторы для чего-либо, кроме int. Это привело к сотням приведений во всем моем коде. Ошибки, такие как «Невозможно неявно преобразовать тип« int »в« ushort ». Существует явное преобразование (вам не хватает приведения?)»
byte b1 = 0x22;
byte b2 = 0x33;
ushort s1 = b1 << 8; // <-- Error Here
ushort s2 = s1 | b2; // <-- And Here
Это заставляет меня использовать повсюду повороты.
byte b1 = 0x22;
byte b2 = 0x33;
ushort s1 = (ushort)(b1 << 8 | b2);
Это должно быть самое большее предупреждение. Даже если b1 и b2 типа ushort, это все равно ошибка. Даже базовая арифметика, такая как сложение, дает ту же ошибку.
ushort s1 = 0x22;
ushort s2 = s1 + 0x11; // <-- Oh Come On.
ushort s3 = 8;
ushort s4 = (s1 << s3 | s2); // <-- Still an Error.
Есть ли что-нибудь вокруг этого, или мне просто нужно смириться с тем фактом, что приведение является лишь частью жизни C #, когда речь идет об использовании чего-либо, кроме целых чисел, или просто об использовании C ++, где это не проблема. *