动态作为返回类型

时间:2011-10-25 09:45:41

标签: c#-4.0 dynamic

我遇到需要从方法返回匿名类型对象的情况,使用dynamic作为返回类型是个好主意吗?需要考虑哪些因素?

public dynamic MyMethod()
{
    // process and return the object of an anonymous type
}

3 个答案:

答案 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)。如果采用这种方法,则需要确保匿名类型的属性与动态对象上的访问内容相匹配。否则,您将收到运行时错误

但是,我建议您考虑返回具体类型