Почему:Конфликт между типажей
int x = 3;
string y = x.toString();
^работает
и
int x = 3;
string y = (string)x;
^Doesnt работает
любопытство привело меня сюда ...
Почему:Конфликт между типажей
int x = 3;
string y = x.toString();
^работает
и
int x = 3;
string y = (string)x;
^Doesnt работает
любопытство привело меня сюда ...
Поскольку первый использует метод int.ToString
для новообращенныйint
на это string
представление в то время как второй старается castint
к string
, который не работает, потому что это на самом деле не string
но int
.
Read:
Явные преобразования (отливок): Явные преобразования требуют произнесения оператора. Кастинг необходим, если информация может быть потеряна в преобразовании , или когда преобразование может не удаться для других причин .
String
и Int32
не связаны вообще, поэтому они не могут быть литыми друг к другу и уже компилятор выдаст сообщение об ошибке. Иногда компилятор успешно компилируется, но вы получаете InvalidCastException
во время выполнения, когда сбой выполнен.
Read: Compile-time and runtime casting c#
Обратите внимание, что вы можете конвертироватьint
в string
через ToString
и вы можете конвертироватьstring
в int
через int.Parse
(или int.TryParse
):
int z = int.Parse("3");
ToString
- не тип литье. Это метод, унаследованный от object
и реализованный в System.Int32
, который преобразует целое число в строковое представление.
int не является строкой, поэтому кастинг по праву терпит неудачу. Метод ToString
- это то, где вы помещаете пользовательскую логику, которой нет приведения типов, для преобразования экземпляра в его строковое представление. Вы можете (и часто должны) реализовать ToString
самостоятельно в своих пользовательских классах и структурах - часто полезно иметь содержательное строковое представление.
Tim прав int первая строка кода 'Int.tostring()' является методом, а во втором коде вы выполняете кастинг из структуры Int ** ** в s tring ** Класс **, который дает ошибку. – Rashmin