【问题标题】:What is the correct way to assert relationships between const variables断言 const 变量之间关系的正确方法是什么
【发布时间】:2020-07-05 12:42:02
【问题描述】:

我有一个类用于在游戏引擎中创作一些动画。该动画的变量被编写为const float,如下所示:

const float firstAnimationDuration = 3f;
const float secondAnimationDelay = 1f;
const float secondAnimationDuration = 1f;

在本例中,第一个动画需要 3 秒才能完成,子动画将在第一个动画开始后 1 秒开始,并需要 1 秒才能完成。

动画代码的构建假设secondAnimation 将在firstAnimation 之前完成 - 在这种情况下它会。如果第一个动画完成后第二个动画仍在运行,则系统可能会出现不可预知的行为。

问题是其他人很可能会在以后编辑这些const float,我需要一个好的方法来警告他们这些要求。

我添加了解释要求的 cmets,但理想情况下我会添加某种控制台错误,或者更好的是编译时错误。

我在类初始化器中尝试了以下代码:

if (secondAnimationDelay + secondAnimationDuration > firstAnimationDuration)
{
    Debug.LogError ("Second animation cannot be longer than First Animation");
}

但这会导致编译时警告说 Debug.LogError 是无法访问的代码(这是有道理的!),但在这种情况下,警告是防止编译时问题,而不是运行时错误,所以它是 假定的 无法访问。

鉴于我不希望每次构建时都在控制台中留下警告,那么防止更改这些 const 值以避免意外后果的最佳方法是什么?

【问题讨论】:

  • 一条评论,你无能为力。
  • 如何通过接受这些值并将验证放入构造函数来参数化类?
  • 你也可以编写一个单元测试来确保这些事情是有意义的。
  • 这将完全消除编译时间常数的想法。并且单元测试也是用户必须运行的东西——但是是的,这是你能做的最好的事情。
  • #pragma warning 消除警告怎么样?

标签: c# constants


【解决方案1】:

总的来说,这似乎是#pragma warning disable 的合法用例。

if (secondAnimationDelay + secondAnimationDuration > firstAnimationDuration)
{
#pragma warning disable  
    Debug.LogError ("Second animation cannot be longer than First Animation");
#pragma warning restore
}

【讨论】:

    猜你喜欢
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    相关资源
    最近更新 更多