【问题标题】:Is there any alternative to Constant in C#?C# 中是否有替代常量的方法?
【发布时间】:2014-06-02 16:14:39
【问题描述】:

我正在使用 Microsoft XNA 和 Kinect 创建一个程序。我想获得骨架的宽度。我有骷髅右手和左手点。我减去它们并得到骨架的宽度。我想将此值存储在一个常量中,这样如果 Skeleton 移动到任何地方,它就不会改变。

我编写了以下代码,但它给了我以下错误消息。请告诉我任何替代方案或指导我如何使用常量

Joint hand = skl.Joints[JointType.HandRight];
DepthImagePoint rightShoulderPt = sensor.CoordinateMapper.MapSkeletonPointToDepthPoint(rightShoulder.Position, DepthImageFormat.Resolution640x480Fps30);

DepthImagePoint leftShoulderPt = sensor.CoordinateMapper.MapSkeletonPointToDepthPoint(leftShoulder.Position, DepthImageFormat.Resolution640x480Fps30);

编辑 //例如 //这些值将根据骨架位置不断变化。我想冻结//这些点并将它们存储在某个变量中。

rightShoulderPt.X= 200; leftShoulderPt.X = 450;

const float totalWidth = rightShoulderPt.X - leftShoulderPt.X;

错误 1 ​​分配给 'totalWidth' 的表达式必须是常量

【问题讨论】:

    标签: c# visual-studio-2010 xna constants kinect


    【解决方案1】:

    永远不要改变价值。 constant 关键字用于编译时常量,而不是运行时!

    您可以使用readonly 并在构造函数中分配此值。除此之外,我认为您的情况没有特定的关键字。

    【讨论】:

    • 只读是关键字。它所做的只是确保您只能在构造函数中分配此变量。之后就不能再修改了。
    • +1。 @user3480644 readonly 是限制您何时可以更改为值的修饰符...不确定您的评论是什么意思:“只读更改变量与否”(有关详细信息,请参阅 Robert Harvey 的答案提供的 MSDN 链接)。
    • @user3480644:那么它不是一个常数,也不是只读的。只是永远不要改变价值。
    • 如果我们要在这里提供帮助,我认为您必须展示更多代码。这个变量是类中的一个字段吗?如果是这样,将其设为readonly 将确保您只能在类构造函数中对其进行赋值。如果之后要分配给它,则不能使用readonlyconstant。只是“不改变”自己的价值有问题吗?如果骨架移动,它不会改变,除非你明确地改变它。
    • 只需声明一个字段并分配一次该值。也许将其设为 Nullable<float> 或检查它是否不等于 0.0。在您的更新循环中,只有在之前没有完成时才分配它。请记住,仅仅因为 XNA 为您提供了这些数据,并不意味着您每次都必须覆盖自己的派生值。
    【解决方案2】:

    readonly 允许您在构造函数中设置值,但禁止进一步更改。

    readonly 关键字是可以在字段上使用的修饰符。当一个 字段声明包括一个只读修饰符,分配给 声明引入的字段只能作为 声明或在同一类的构造函数中。

    http://msdn.microsoft.com/en-us/library/acdd6hb7.aspx

    【讨论】:

      猜你喜欢
      • 2010-09-20
      • 2010-10-09
      • 2021-01-30
      • 2011-04-21
      • 1970-01-01
      • 2021-11-06
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多