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