新对象内联实例化

时间:2011-12-14 16:25:37

标签: c# asp.net-mvc-3 object types

NEWBIE,新手,新手问题,抱歉。我刚刚开始用C#编程(很久以前就是强类型的c ++世界)。返回编程很有趣,但我在global.asax文件中看到routes.MapRoute方法,它将某种无类型对象作为第三和第四个参数。两者都实例化相同,但可能是两种不同的类型。

route.MapRoute( p1, p2, new { controller = "Home", Action = "Index" }, new {} );

令人惊讶的是,一切运作良好。但是,我现在想要在帮助器中访问第3个参数,它将作为对象类型进入。将对象类型转换为任何类型的对象都没有任何问题,但我不知道它被实例化为什么(我也找不到任何比对象更多的文档)。在同一条线上,它究竟如何知道如何处理类型/无类型对象中存在的“控制器”之类的东西?现在我有一个未知的对象类型,里面有未知/变化的属性类型。我猜var?

正如对编译器做出的这些假设的评论一样,当我看到创建单元测试的示例只是为了确保包含松散类型的内容并正确拼写和输入时,我对松散类型方法的价值失去信心。我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

  

采用某种无类型对象的routes.MapRoute方法

这不是一个无类型的对象;对象有一个类型,只有anonymous type

  

它究竟如何知道如何处理类型/无类型对象中存在的'controller'之类的内容?

它使用reflection

检查对象
  

但是,我现在想要在帮助器中访问第3个参数,它将作为对象类型进入。将对象类型转换为任何类型的对象都没有任何问题,但我不知道它被实例化为什么

匿名类型的范围仅限于使用它们的方法。如果您需要在其他地方重用此类型,请使用命名类型而不是匿名类型。

只是说清楚:使用匿名类型不会“打破”强类型。只是在某些情况下,您只需要在一个地方使用该类型,因此您不希望声明只使用一次的类型。在MapRoute方法的情况下,使用匿名类型只是一种方便,因为声明匿名类型的实例比手动创建字典(键/值对列表)更容易

相关问题