InvalidCastException
InvalidCastException бросает CLR, когда
явное приведение (T) не совместимо с
фактическим типом в object. Это не
InvalidOperationException
и не ошибка состояния. Связанный приём -
распаковка
значимых типов. Ловят через
catch.
Синтаксис
object box = 5;
string text = (string)box;
Пример
Давайте приведём int в string
и поймаем ошибку:
using System;
class Program
{
static void Main()
{
try
{
object box = 5;
string text = (string)box;
}
catch (InvalidCastException)
{
Console.WriteLine("fail");
}
}
}
Результат выполнения кода:
"fail"
Пример
Давайте поймаем исключение отдельным
типом в catch:
using System;
class Program
{
static void Main()
{
try
{
object box = 5;
var unused = (string)box;
}
catch (InvalidCastException ex)
{
Console.WriteLine(ex.GetType().Name);
}
}
}
Результат выполнения кода:
"InvalidCastException"
Пример
Давайте убедимся, что успешное приведение не бросает исключение:
using System;
class Program
{
static void Main()
{
try
{
object box = "abcde";
string text = (string)box;
Console.WriteLine(text);
}
catch (InvalidCastException)
{
Console.WriteLine("fail");
}
}
}
Результат выполнения кода:
"abcde"
Смотрите также
-
распаковка,
которая извлекает значимый тип изobject -
InvalidOperationException,
когда мешает состояние, а не тип -
блок
catch,
которым обрабатывают сбой -
ArgumentOutOfRangeException,
когда неверный аргумент, а не каст