(C #), почему Visual Studio говорит, что это объект, а GetType говорит, что это Func <object> ?
C # вопрос новичка здесь. Следующий код (взятый из книги «C # From Novice to Professional» Кристиана Гросса, Apress) выдает ошибку:
<code>worksheet.Add("C3", CellFactories.DoAdd(worksheet["A2"], worksheet["B1"])); </code>
Причина в том, что методDoAdd()
не принимает данные аргументы.
<code>public static Func<object> DoAdd(Func<object> cell1, Func<object> cell2) {...} </code>
VS утверждает, что оба аргумента в вызове метода имеют типobject
тогда как метод принимает толькоFunc<object>
, Ноvalue обоих элементов листа имеет типFunc<object>
:
<code>worksheet.Add("A2", CellFactories.Static(10.0)); </code>
где этоStatic
Метод просто возвращает заданное значение:
<code>public static Func<object> Static(object value) { return () => value; } // return type= Func<object> </code>
Когда я снимаюworksheet["A2"]
какFunc<object>
код работает.
Но есть кое-что, чего я не понимаю. Тип экземпляра объектаFunc<object>
, Я использовалGetType()
Метод, чтобы увидеть доказательство этого, и сравнить типы объектов исходных элементов с типами объекта приведения (который принят):
<code>Console.Writeline(worksheet["A2"].GetType()); // now cast to the correct type (why can't it do that implicitly, btw?) Funk1 = worksheet["A2"] as Func<object>; Console.Writeline(Funk1.GetType()); </code>
.. и они ВСЕ идентичны! (Тип =System.Func'1[System.Object]
)
И даже когда я использую.Equals()
метод для сравнения обоих типов, он возвращаетtrue
.
Тем не менее, VS видит первый экземпляр объекта как типobject
в вызове метода. Зачем? Почему вызываемый метод "см." аргумент как тип, отличный от GetType () возвращает?
(и если да, то что хорошего вGetType()
метод?)
Большое спасибо за ваши советы / комментарии! (Изучать язык довольно сложно, если примеры из книги дают ошибку, а вы не видите причину - следовательно, у вас сложилось смутное впечатление, что что-то не так сGetType()
или VS.)