Почему c # не может определить кастинг? - PullRequest
0 голосов
/ 20 сентября 2019

Итак, я недавно впервые начал работать с отражением и обнаружил, что GetType () знает исходный тип объекта, даже если он просто хранится как объект.

foreach(object o in (IEnumerable) property.GetValue(element))
{
    List(o, verbose, int.MaxValue, subIncludes[attribute.Name], indents + 4);
}

Так что здесьо фактически переходят в общий метод.Я обнаружил, что после передачи, o.GetType ();возвращает реальный тип класса, а не System.Object, который меня удивил.Для аргументов, скажем, тип является продуктом.Так что, если тип уже известен, почему необходимо приводить o к Product как Product p = (Product) o; вместо того, чтобы просто делать Product p = o?Почему бы не сделать вывод, что приведение является желаемым результатом, так как тип уже известен?

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Во время компиляции он не знает, что такое o.Было бы совершенно уместно использовать что-то, что не было Product здесь.

Ваш главный вопрос - ...instead of just doing Product p = o - Что если бы в Product был реализован неявный оператор?

public static implicit operator Product(object o)

Затем, учитывая, что вы хотите использовать свой новый непринужденный синтаксис приведения - Product p = o среда выполнения не будет знать, каким образом его преобразовать - используя неявное преобразование или ваше приведение.Может быть, поэтому этот синтаксис не разрешен.

1 голос
/ 20 сентября 2019

Casting - это функция времени компиляции.Он сообщает компилятору, что вы знаете, что делаете.Прямое назначение в качестве второго примера оценивается во время выполнения.

...