我的方法exMethod
以这种方式返回值:
return new {name = name, surname = surname};
我使用此代码
var person = exMethod();
但此时如何访问其字段?我试过
person.name
但抛出异常
'object' does not contain a definition for 'name'
答案 0 :(得分:11)
匿名类型无法跨越方法的边界传递而不会丢失其类型(它们将恢复为object
)。既然你不能施展它,你就会陷入困境。
您必须创建一个类型以将其公开到创建方法的外部。 (我不想提及dynamic
作为解决方案)
答案 1 :(得分:1)
你可以做到
dynamic person = exMethod();
但不推荐,并且是“简单的出路”,那么你就不会有任何编译时错误。另一个解决方案可能是使用反射,但这可能很重。
最好(最安全,最佳实践)的想法可能是创建一个类来定义要返回的类型
class Foo {
public string name {get;set;}
public string surname{get;set;}
}
return new Foo(){ name = name, surname = surname }
然后你就可以使用这些属性了
答案 2 :(得分:0)
如果您可以控制 exMethod
,请将其修改为Patrick suggests。
如果您不这样做,并且必须接受Object
使用dynamic
而不是var
:
dynamic person = exMethod();
person.name;
击> <击> 撞击>
答案毫无价值,评论很好,特别是@ Servy's:
匿名类是内部的,因此如果它位于您无法访问的API中,则
dynamic
将无效。当您控制方法的实现时,它只是一个选项。