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