(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.)

Ответы на вопрос(3)

Ваш ответ на вопрос