(C #) Dlaczego Visual Studio mówi, że jest obiektem, podczas gdy GetType mówi, że jest to obiekt Func?

C # newbie pytanie tutaj. Poniższy kod (zaczerpnięty z książki „C # From Novice to Professional” autorstwa Christiana Grossa, Apress) zawiera błąd:

<code>worksheet.Add("C3", CellFactories.DoAdd(worksheet["A2"], worksheet["B1"]));
</code>

Powodem jest to, że metodaDoAdd() nie przyjmuje podanych argumentów.

<code>public static Func<object> DoAdd(Func<object> cell1, Func<object> cell2) {...}
</code>

VS twierdzi, że oba argumenty w powyższym wywołaniu metody są typuobject podczas gdy metoda akceptuje tylkoFunc<object>. Alewartość obu elementów arkusza jest typuFunc<object>:

<code>worksheet.Add("A2", CellFactories.Static(10.0));
</code>

gdzie to jestStatic metoda po prostu zwraca podaną wartość:

<code>public static Func<object> Static(object value) { return () => value; }
// return type= Func<object>
</code>

Kiedy rzucamworksheet["A2"] tak jakFunc<object>, kod działa.

Ale jest coś, czego nie rozumiem. Typ instancji obiektu toFunc<object>. UżyłemGetType() metoda sprawdzenia tego i porównania typów obiektów oryginalnych elementów z obiektami rzutowanymi (zaakceptowanymi przez IS):

<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>

.. i wszystkie są identyczne! (Wpisz =System.Func'1[System.Object])

A nawet gdy używam.Equals() metoda porównania obu typów, powracatrue.

Jednak VS widzi pierwszą instancję obiektu jako typobject w wywołaniu metody. Czemu? Dlaczego wywołana metoda „widzi” argument jako inny typ niż zwraca GetType ()? (a jeśli tak, to jaki jest dobryGetType() metoda?)

Bardzo dziękuję za porady / komentarze! (Trudno jest nauczyć się języka, jeśli przykłady książek zawierają błąd, a nie widzisz powodu - stąd mgliste wrażenie, że coś jest nie tak zGetType() lub VS)

questionAnswers(3)

yourAnswerToTheQuestion