field.SetValue(model, value)出错了

在尝试通过反射将数据库查询结果赋值给Employee类的salary字段时,出现System.ArgumentException,因为数据库中的SmallInt类型不能直接赋值给Nullable<int>。解决方法包括使用属性反射、修改字段类型或使用Convert.ChangeType转换。
摘要由CSDN通过智能技术生成

from:https://q.cnblogs.com/q/3195/

我有一个类如下

 public class Employee
    {
        Guid? Id = null;

        int? salary = null; // 数据库里对应的类型为SmallInt型

        /// <summary>
        /// 员工编号
        /// </summary>
        public Guid ID
        {
            get
            {
                if (Id == null)
                {
                    return Guid.Empty;
                }

                return Id.Value;
            }
            set
            {
                if (value == Guid.Empty)
                {
                    Id = null;
                }
                else
                {
                    Id = value;
                }
            }
        }

        /// <summary>
        /// 员工工资
        /// </summary>
        public int Salary
        {
            get
            {
                // 如果员工工资为空,返回int的最小值
                if (salary == null)
                {
                    return int.MinValue;
                }

                return salary.Value;
            }
            set
            {
                if (value == int.MinValue)
                {
                    salary = null;
                }
                else
                {
                    salary = value;
                }
            }
        }

}

现在,我从数据库里查询出来了记录,想通过反射把这些记录的值放进员工的实体对象里,由于salary在数据库里的类型是smallInt类型的,在给实例的salary字段设置值时会报错System.ArgumentException: 类型“System.Int16”的对象无法转换为类型“System.Nullable`1[System.Int32]”。

给salary字段赋值的代码大概为FieldInfo field = ........;field.SetValue(model, value),其中model为生成的实力对象,value为DataRow["

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值