Ну вот мой выстрел в это:
Метод 1
Это приведение типа, то есть значение должно иметь тип, который может быть прямо или косвенно преобразован в байт. Кроме того, значение не должно быть за пределами байта.
Вызов не удался, так как у компилятора нет никакой информации, из какого типа объекта он должен быть приведен, и, следовательно, он не может выполнить неявное или явное преобразование. Делая
int obj = 1;
byte b = (byte) obj;
или
byte b = (byte) (int) obj;
работает. Второй вариант использует явную распаковку (таким образом, предоставляя необходимую информацию), как описано в комментарии и посте Рида Копси. ссылка , предоставленная комментарием Рида Копси, объясняет это подробно.
Для приведения пользовательских объектов используют неявные и явные преобразования - операторы, которые являются статическими методами, определенными в классе. Для object
не существует неявных или явных операций (см. ссылка по причине), в то время как для int
эти операции существуют.
Метод 2
Здесь вы анализируете строку, значение строки должно быть числом, которое находится внутри границы байта. Здесь вы также можете использовать TryParse
, что позволяет проверить, будет ли преобразование выполнено успешно.
Метод 3
Использует преобразование типов класса Convert
. Это наиболее гибкий метод, который поддерживает большинство распространенных типов. Здесь значение должно быть преобразовано в число, а значение должно находиться в пределах байта. Класс Convert
использует IConvertible
для преобразования между различными типами и, следовательно, является расширяемым.