未知的C#类型

时间:2015-10-08 14:55:28

标签: c# .net var

我的方法exMethod以这种方式返回值:

return new {name = name, surname = surname};

我使用此代码

var person = exMethod();

但此时如何访问其字段?我试过

person.name

但抛出异常

'object' does not contain a definition for 'name'

3 个答案:

答案 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将无效。当您控制方法的实现时,它只是一个选项。