有没有办法以某种方式存储void
方法的值?特别是,我试图在PowerPoint演示文稿中获取特定形状的动画效果数据,并在以后使用它:
object r = presentation.Slides[2].Shapes[3].PickupAnimation();
但是编译器说
无法将类型'object'隐式转换为'void'
当然,我无法编辑此方法并将其更改为返回值。
答案 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没有任何特别的了解。