C# 代码协定自定义==断言错误

C# 代码协定自定义==断言错误,c#,code-contracts,physics-engine,C#,Code Contracts,Physics Engine,我正在编写一个简单的2d物理引擎,我已经为我的Vector2结构重写了==如下: [Pure] public static bool operator ==(Vector2 v1, Vector2 v2) { Contract.Ensures(Contract.Result<bool>() == (v1.x == v2.x && v1.y == v2.y)); return v1.x == v2.x && v1.y == v2.y; } [

我正在编写一个简单的2d物理引擎,我已经为我的Vector2结构重写了==如下:

[Pure]
public static bool operator ==(Vector2 v1, Vector2 v2)
{
  Contract.Ensures(Contract.Result<bool>() == (v1.x == v2.x && v1.y == v2.y));

  return v1.x == v2.x && v1.y == v2.y;
}
[纯]
公共静态布尔运算符==(Vector2V1,Vector2V2)
{
Contract.survey(Contract.Result()==(v1.x==v2.x&&v1.y==v2.y));
返回v1.x==v2.x&&v1.y==v2.y;
}
但是,当我在合同中使用它时,我会得到以下结果:

public Vector2 Position
{
  get
  {
    Contract.Ensures(Contract.Result<Vector2>() == position);

    Contract.Assert(position == position); // Assert unproven: position == position

    return position;
  }
}
公共向量2位置
{
得到
{
合同。确保(合同。结果()=位置);
Assert(position==position);//Assert unprovent:position==position
返回位置;
}
}

我添加了断言作为调试的一种方式。位置只是一个私有向量2字段,由结构中唯一的圆构造函数设置。Vector2本身就是一个结构。

我想我找到了问题的答案。我使用私有字段来描述我的合同。一旦我切换这些引用以使用公共属性,然后用[ContractPublicProperty(“PropertyName”)]注释我的字段,问题就消失了。我相信这是因为Circle结构在Vector2结构中没有合同的可见性