下图显示了 RouteCollectionExtensions.Mapproute
方法的 MSDN 引用。
该方法有 1 个名为 defaults 的参数,它是一个对象 类型。
下图显示了 Visual Studio 中 ASP.NET MVC 项目中不包含错误的一行代码(加框)。
代码创建一个新对象并将其作为参数传递给 MapRoute
方法。
该对象包含成员,即 controller
、action
和 id
。
但是,该对象是从 System.Object
类创建的。 System.Object 类中没有指定此类成员。
如何创建对象,因为它没有具有这些成员的类?
最佳答案
您需要在此了解各种不同的想法。
最重要的是,有一个 anonymous type 的想法.看看这个:
var x = new { Name = "Jon", Location = "Reading" };
创建了一个匿名类型的实例,并将生成的引用分配给变量x
。在编译时,编译器将生成一个类型,它实际上有一个名称,但您不能引用它。
现在在这种情况下,x
将被强类型化为“未命名”类型 - 但也可以使用:
object x = new { Name = "Jon", Location = "Reading" };
毕竟,我们只是在创建一个对象,每个类类型都与object
兼容,就像我们可以这样写:
object x = new StringBuilder();
您提供的示例代码非常相似,只是它使用值作为方法调用的参数,而不是将其分配给变量。
MapRoute
方法使用反射来确定匿名类型的属性和传入的实例中存储的值。
关于c# - 如何创建具有未在类中指定的成员的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34087643/