未知的c#类型

本文关键字:类型 未知 | 更新日期: 2023-09-27 18:16:57

我有一个方法exMethod,以这种方式返回值:

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

,我使用这个代码

var person = exMethod();

但是此时我如何访问它的字段呢?我试过

person.name

,但抛出异常

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

未知的c#类型

匿名类型不能在不丢失其类型的情况下跨方法边界传递(它们将恢复为object)。因为你不能施放它,所以你被卡住了。

您必须创建一个类型以将其暴露给创建方法的外部。(我不想提及dynamic作为解决方案)

你可以做

dynamic person = exMethod();

,但不推荐,是"简单的方法",你不会有任何编译时错误。另一个解决方案是使用反射,但这可能会很重。

最好(最安全,最佳实践)的想法可能是创建一个类来定义要返回的类型
class Foo {
    public string name {get;set;}
    public string surname{get;set;}
}
return new Foo(){ name = name, surname = surname }
那么你就可以使用这些属性

如果您控制了exMethod,请按照Patrick的建议修改它。

如果你不这样做,必须接受它作为Object使用dynamic代替var:

dynamic person = exMethod();
person.name;

答案毫无价值,评论很好,尤其是@Servy的:

匿名类是内部的,所以如果它在一个你没有访问权限的API中,那么dynamic将不起作用。只有当你能够控制方法的实现时,它才是一个选项。