ASP.NET MVC初始化器成员声明无效:复制行时递增值报错
解决复制数据行时的“invalid initializer member declarator”错误
嘿,这个错误我之前也踩过坑!问题出在你用对象初始化器的时候,直接写了FurnitureCount += 1这种复合赋值操作——C#的对象初始化器不允许这么写,它要求每个成员只能是直接的赋值表达式(也就是属性名 = 具体值/计算结果),而+=属于语句级别的操作,没法放在初始化器里。
给你两种简单的解决办法:
方法一:直接计算后赋值
把原对象的FurnitureCount取出来加1,直接赋值给新对象的属性:
var temp = db.Furnitures.Find(id); var duplicateRow = new Furniture() { FurnitureName = temp.FurnitureName, FurniturePrice = temp.FurniturePrice, FurnitureSupplier = temp.FurnitureSupplier, // 直接用原数值+1赋值,避免复合操作 FurnitureCount = temp.FurnitureCount + 1, // 其他需要复制的属性... };
如果FurnitureCount是可空类型(比如int?),记得处理null的情况,比如用(temp.FurnitureCount ?? 0) + 1,防止空引用错误。
方法二:先初始化对象,再单独修改属性
如果觉得第一种写法不够直观,可以先把所有属性复制完成,再单独做递增操作:
var temp = db.Furnitures.Find(id); var duplicateRow = new Furniture() { FurnitureName = temp.FurnitureName, FurniturePrice = temp.FurniturePrice, FurnitureSupplier = temp.FurnitureSupplier, FurnitureCount = temp.FurnitureCount, // 其他需要复制的属性... }; // 初始化完成后,再执行递增操作 duplicateRow.FurnitureCount += 1;
这种方式更灵活,要是后续还有其他复杂的属性修改逻辑,都可以放在初始化之后处理。
简单总结下:对象初始化器只接受属性 = 表达式的形式,复合赋值(+=/-=等)属于执行语句,不能直接塞进去,换个方式把计算结果直接赋值就好啦!
内容的提问来源于stack exchange,提问作者LearnProgramming
相关产品推荐
相关产品推荐

