C# Ref结构变量赋值和更改在c中无效#

C# Ref结构变量赋值和更改在c中无效#,c#,C#,我已经定义了两个引用结构的变量:ref-var x=ref-struct\u-var。他们一开始并不平等,就像打印出来的结果一样。当我使用x=y将它们设置为相同时,它们似乎通常指向相同的对象。但是在我修改了它们的成员值之后,它们就不同步了。我是否忽略了任何语法特征 struct d { public int x, y; }; static void Main(string[] args) { var arr = new[] { new d() { x = 1, y = 2

我已经定义了两个引用结构的变量:
ref-var x=ref-struct\u-var
。他们一开始并不平等,就像打印出来的结果一样。当我使用
x=y
将它们设置为相同时,它们似乎通常指向相同的对象。但是在我修改了它们的成员值之后,它们就不同步了。我是否忽略了任何语法特征

  struct d { public int x, y; };

  static void Main(string[] args)
  { 
    var arr = new[] { new d() { x = 1, y = 2 }, new d() { x = 3, y = 4 } };
    ref var x = ref arr[0];
    ref var y = ref arr[1];
    
    print(x.GetHashCode() == y.GetHashCode(), object.Equals(x, y)); // false, false

    x = y; // it seem they ref to the same struct.
    print(x.GetHashCode() == y.GetHashCode(), object.Equals(x, y)); // true, true

    x.x = ~y.y; // x.x is not equal to y.x
    print(x.GetHashCode() == y.GetHashCode(), object.Equals(x, y)); // false, false

    y.x = x.x; // 
    print(x.GetHashCode() == y.GetHashCode(), object.Equals(x, y)); // true, true
  }

x=y
不执行引用赋值,而是复制值。你需要使用

x = ref y;
它给出了您期望的结果:

struct d { public int x, y; }
  
static void Main(string[] args)
{ 
  var arr = new[] { new d{ x = 1, y = 2 }, new d{ x = 3, y = 4 } };
  ref var x = ref arr[0];
  ref var y = ref arr[1];
    
  (x.Equals(y)).Dump(); // False

  x = ref y;
  (x.Equals(y)).Dump(); // True

  x.x = ~y.y; 
  (x.Equals(y)).Dump(); // True

  y.x = x.x; // 
  (x.Equals(y)).Dump(); // True
}

arr
现在包含
(1,2),(-5,4)
x=y
不执行参考赋值,它复制值。你需要使用

x = ref y;
它给出了您期望的结果:

struct d { public int x, y; }
  
static void Main(string[] args)
{ 
  var arr = new[] { new d{ x = 1, y = 2 }, new d{ x = 3, y = 4 } };
  ref var x = ref arr[0];
  ref var y = ref arr[1];
    
  (x.Equals(y)).Dump(); // False

  x = ref y;
  (x.Equals(y)).Dump(); // True

  x.x = ~y.y; 
  (x.Equals(y)).Dump(); // True

  y.x = x.x; // 
  (x.Equals(y)).Dump(); // True
}

arr
现在包含
(1,2),(-5,4)

?不,
x
/
y
是ref结构类型,我不能将
ref
关键字放入
x=y
。我正在使用vs 2017。在vs 2017中,您需要在项目文件中使用
7.3
来启用该功能。@user202729,在我读了两遍答案后,它确实击中了我的头,回答得很好。谢谢大家?不,
x
/
y
是ref结构类型,我无法将
ref
关键字放入
x=y
。我正在使用vs 2017。在vs 2017中,您需要在项目文件中使用
7.3
来启用该功能。@user202729,在我读了两遍答案后,它确实击中了我的头,回答得很好。谢谢大家。