未知的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'
匿名类型不能在不丢失其类型的情况下跨方法边界传递(它们将恢复为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
将不起作用。只有当你能够控制方法的实现时,它才是一个选项。