从 void 方法返回一个值

本文关键字:一个 void 方法 返回 | 更新日期: 2023-09-27 17:57:09

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

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

但是编译器说

无法将类型"对象"隐式转换为"void"

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

从 void 方法返回一个值

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

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

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


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

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

它就像动画参数的剪贴板。从文档中:

将上次选取的动画应用于 Shape 对象。

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

MSDN:

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

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

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

请注意,这只是演示该技术的示例 - 我对所讨论的 API 没有任何特别的知识。