C#新手问题在这里。以下代码(摘自 Apress 的 Christian Gross 所著的《C# From Novice to Professional》一书)给出了错误:
worksheet.Add("C3", CellFactories.DoAdd(worksheet["A2"], worksheet["B1"]));
原因是方法DoAdd()
不接受给定的参数。
public static Func<object> DoAdd(Func<object> cell1, Func<object> cell2) {...}
VS 声称上面方法调用中的两个参数都是类型object
而该方法只接受Func<object>
。但是value两个工作表元素的类型都是Func<object>
:
worksheet.Add("A2", CellFactories.Static(10.0));
在哪里这个Static
方法只返回给定值:
public static Func<object> Static(object value) { return () => value; }
// return type= Func<object>
当我施放时worksheet["A2"]
as Func<object>
,代码确实有效。
但有件事我不明白。对象实例的类型是Func<object>
。我已经用过GetType()
方法来查看证明,并将原始元素的对象类型与转换对象的对象类型(已接受)进行比较:
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());
..而且它们都是相同的! (类型=System.Func'1[System.Object]
)
即使当我使用.Equals()
方法比较两种类型,它返回true
.
然而,VS 将第一个对象实例视为类型object
在方法调用中。为什么?为什么被调用的方法将参数“视为”与 GetType() 返回的类型不同的类型?
(如果是这样,那有什么好处GetType()
方法?)
非常感谢您的建议/评论! (如果书上的例子给出了错误,而你看不到原因,那么学习这门语言就有点困难了——因此,有一种模糊的印象,认为有问题GetType()
or VS.)