You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:34:33