Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 属性和变量之间的差异_C#_Struct_Mutable - Fatal编程技术网

C# 属性和变量之间的差异

C# 属性和变量之间的差异,c#,struct,mutable,C#,Struct,Mutable,此代码工作正常。 同时,这会导致编译错误(“无法修改p的返回值,因为它不是变量”): 有什么区别吗?您使用的是一个 您的问题是,属性返回结构的副本,而不是对原始字段的引用。因此,您的修改只会影响复制的结构。 在一些简单的情况下(调用setter),编译器会发现您的错误。在复杂的情况下(调用改变结构的方法),编译器无法捕获它,代码将自动失败(即,副本被修改,原始保持不变) 解决方法是使用p=新点(x,y) class MyClas { public System.Windows.Point

此代码工作正常。

同时,这会导致编译错误(“无法修改p的返回值,因为它不是变量”):


有什么区别吗?

您使用的是一个

您的问题是,属性返回结构的副本,而不是对原始字段的引用。因此,您的修改只会影响复制的结构。
在一些简单的情况下(调用setter),编译器会发现您的错误。在复杂的情况下(调用改变结构的方法),编译器无法捕获它,代码将自动失败(即,副本被修改,原始保持不变)

解决方法是使用
p=新点(x,y)

class MyClas
{
   public System.Windows.Point p;
   public void f()
   {
      p.X = 0;
   }
}
class MyClas
{
   public System.Windows.Point p {get; set;}
   public void f()
   {
      p.X = 0;
   }
}