Unabletoassignauto-implementedpropertiesinstruct我有下一个代码:structT{publicT(intu){this.U=10;//这里有错误}publicintU{get;私有集;C#编译器在规定的行给出了一对错误:1)自动实现的属性“TestConsoleApp必须在将控制返回给调用者.Program.TU之前完全分配”备份字段。考虑从构造函数初始值设定项调用默认构造函数。2)在分配所有字段之前不能使用“this”对象我做错了什么?帮助我理解来自C#规范:10.7.3自动实现的属性当一个属性被指定为自动实现的属性时,会自动为该属性提供一个隐藏的支持字段,并实现访问器以读取和写入该支持字段.[已删除]由于无法访问支持字段,因此即使在包含类型中,也只能通过属性访问器读取和写入它们。[已删除]此限制还意味着对具有自动实现属性的结构类型的明确赋值只能使用结构的标准构造函数来实现,因为对属性本身的赋值需要对结构进行明确赋值。这意味着用户定义的构造函数必须调用默认构造函数。所以你需要这个:structT{publicT(intu):this(){this.U=u;}publicintU{得到;私有集;好吧,首先你创建一个可变结构——这几乎总是一个非常糟糕的主意。可变结构有时会以您意想不到的方式运行。好吧,它只是私有可变的,但是您编写代码来更改它的事实是一个不好的迹象。第二个错误的原因是,在分配所有字段之前,您不能使用该结构的任何属性或方法,因此您需要链接到隐式无参数构造函数:publicT(intu):this(){这。U=10;编译器需要任何构造函数来保留所有明确分配的字段(这就是为什么你早些时候得到第一个错误;编译器不“知道”属性assign()到字段)-通过链接到this(),你确保当你到达构造函数主体时,所有字段都已明确分配,你不必再担心了。但是,除非你真的想允许突变,否则我建议你让它成为一个真正的只读属性:structT{privatereadonlyintu;publicT(intu){this.u=10;}publicintU{get{返回你;}}}现在更明显的是,您甚至不想在结构本身内更改它。添加对默认构造函数的调用:publicT(intu):this(){this.U=10;}这里必须使用默认构造函数:以上是C#学习教程:Cannotassignautomaticallyimplementedpropertysharinginstruct如果对你有用,需要进一步了解C#学习教程,希望大家多多关注它—structT{publicintU{get;私有集;}publicT(intu):this(){U=10;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
