从void方法返回一个值

时间:2015-06-19 08:53:44

标签: c# powerpoint

有没有办法以某种方式存储void方法的值?特别是,我试图在PowerPoint演示文稿中获取特定形状的动画效果数据,并在以后使用它:

object r = presentation.Slides[2].Shapes[3].PickupAnimation();

但是编译器说

  

无法将类型'object'隐式转换为'void'

当然,我无法编辑此方法并将其更改为返回值。

2 个答案:

答案 0 :(得分:2)

如果方法未返回值或具有ref/out参数,则无法存储"结果",因为没有结果。

您应该检查是否存在返回所需值的方法或属性,因为如果不修改方法本身就无法实现您要求的任务。

我不是VSTO专家,但我非常确定除了PickupAnimation之外还有属性或其他方法可以返回动画效果参数。

要将相同的动画参数复制到另一个Shape,请使用ApplyAnimation方法,如:

presentation.Slides[2].Shapes[3].PickupAnimation();
presentation.Slides[2].Shapes[4].ApplyAnimation();

它就像是动画参数的剪贴板。来自docs

  

将最后拾取的动画应用于Shape对象。

答案 1 :(得分:0)

如果有一个合适的函数或属性等,您可以在调用void方法后调用以获取结果,您可以将逻辑包装到extension method。当您希望使用流畅的语法时,这可能特别有用。

MSDN:

  

扩展方法使您可以向现有类型“添加”方法   无需创建新的派生类型,重新编译或其他方式   修改原始类型。扩展方法是一种特殊的方法   静态方法,但它们被称为就像它们是实例方法一样   扩展类型。对于用C#和Visual Basic编写的客户端代码,   调用扩展方法之间没有明显的区别   以及在类型中实际定义的方法。

例如,如果要在单个操作中选取动画并返回AnimationSettings,则可以在静态类中编写此扩展方法:

public static AnimationSettings PickupAnimationAndReturnSettings(this Shape shape)
{
    shape.PickupAnimation();
    return shape.AnimationSettings;
}

请注意,这只是演示该技术的一个示例 - 我对相关API没有任何特别的了解。