我遇到需要从方法返回匿名类型对象的情况,使用dynamic
作为返回类型是个好主意吗?需要考虑哪些因素?
public dynamic MyMethod()
{
// process and return the object of an anonymous type
}
答案 0 :(得分:4)
它没有任何意义,您可以以相同的效果返回object
。
P.S。:匿名类型也不如返回类型那么好。
答案 1 :(得分:3)
是的,它有意义如果您“保证”您将始终返回具有某些特征的对象,例如Id
(忽略它可能会更好用)一个接口)
public dynamic MyMethod()
{
var temp = new ExpandoObject();
temp.Id = 5;
return temp;
}
Console.WriteLine(MyMethod().Id);
因此,如果您保证所有物品都可以Turn Left-Right
,但您不能保证它们是飞机,汽车,摩托车,船只。 (所以如果你正在做Duck typing When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.
)
请注意,如果您需要反思您的对象,它可能会变得丑陋:How do I reflect over the members of dynamic object?
答案 2 :(得分:0)
返回一个动态对象确实有一个好处,允许你从anonmymous类型访问属性而不使用反射(尽管没有intellisense)。如果采用这种方法,则需要确保匿名类型的属性与动态对象上的访问内容相匹配。否则,您将收到运行时错误
但是,我建议您考虑返回具体类型