- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
虽然这个问题乍一看可能很愚蠢,但请听我说完。
c# 的 get{} 和 set{} 方法在您不知道在构建代码时编程目标将如何演变的情况下非常有用。我曾多次享受他们的自由,现在我想知道是否有类似的方法,但有一点不同。
由于我在游戏开发部门工作,所以日复一日地扩展/更新/改进现有代码是一种非常普遍的做法。因此,我自学遵循的模式之一是在我的大多数方法中永远不要多次使用“return”语句。
我这样做的原因是总是能够在方法的底部写一些东西,并确保一旦我的方法结束,我写的那行总是被调用 100%。
这是一个例子:
public void Update()
{
UpdateMovement();
if (IsIncapacitated)
return;
if (IsInventoryOpened)
{
UpdateInventory();
return;
}
if (Input.HasAction(Actions.Fire))
{
Fire();
return;
}
else if (Input.HasAction(Actions.Move))
{
Move(Input.Axis);
return;
}
}
现在假设此方法在整个项目的许多地方被调用了数十次。然后第二天您决定需要在 Update() 方法的最后调用 UpdatePhysics() 方法。在这种情况下,只有 4 个返回值,实际情况可能更糟。
然后想象这样的决定每天都会发生几次。你可能会说糟糕的计划?我可能同意你的看法,但我确实认为开发自由在现代编码中是必不可少的。我认为您不应该在开始编写代码之前就试图预测项目可能发生的每一个转折而自杀。
确保我上面描述的问题永远不会发生的一种方法是按如下方式重写该方法:
public void Update()
{
UpdateMovement();
if (!IsIncapacitated)
{
if (IsInventoryOpened)
{
UpdateInventory();
}
else
{
if (Input.HasAction(Actions.Fire))
{
Fire();
}
else if (Input.HasAction(Actions.Move))
{
Move(Input.Axis);
}
}
}
}
在这种情况下,您始终可以在底部添加一行,并确保它始终会被调用,无论发生什么。
所以我想问一下是否有另一种方法可以允许将“return”-s 放置在任何您想要的地方,同时仍然能够随时在方法的底部轻松添加额外的代码。也许 c# 中有任何形式的语法可以为您完成?或者也许有更好的编码实践可以消除此类问题?
更新:当我开始收到答案时,我意识到我需要稍微澄清一下。
'try/catch/finally' 太矫枉过正了 - 我永远不会使用它们。他们对 catch() 有严重的性能损失,搞砸了 Visual Studio 中的“编辑并继续”功能,而且看起来很丑。
理想情况下,我需要能够从我决定在方法末尾添加的任何代码访问 Update() 方法中的局部变量,
在我写问题的时候,我已经有了答案——嵌套。我的第二个代码示例没有返回,因此我可以将代码添加到方法的最底部,它会在 100% 的时间内运行,同时我将能够使用局部变量。不过嵌套很糟糕,这就是我在这里寻找更好解决方案的原因。
更新 2: 我实际上对 try/catch
有误,因为我不知道您可以跳过 catch
以及它的性能损失,并且只有finally
。但是,这个解决方案仍然比问题中提供的嵌套解决方案更糟糕,因为在您新添加的 finally
block 中,您不再可以使用 return
语句。所以基本上,当您第一次编写该方法时,您可以做任何您想做的事情,但是一旦您扩展了它——您又回到了嵌套状态。
最佳答案
一个简单的建议是包装您的函数。例如:
public void UpdateCall()
{
Update();
AfterUpdate code goes here.
}
关于c# 在另一个方法结束时调用一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37811666/
我是一名优秀的程序员,十分优秀!