动态object

 DynamicObjectWrapper.cs

    /// <summary>
    /// 动态object
    /// </summary>
    public class DynamicObjectWrapper : DynamicObject
    {
        private Dictionary<string, object> properties = new Dictionary<string, object>();
        private Dictionary<string, Delegate> methods = new Dictionary<string, Delegate>();

        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            if (properties.ContainsKey(binder.Name))
            {
                result = properties[binder.Name];
                return true;
            }
            else
            {
                result = null;
                return false;
            }
        }

        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            properties[binder.Name] = value;
            return true;
        }

        public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
        {
            if (methods.ContainsKey(binder.Name))
            {
                result = methods[binder.Name].DynamicInvoke(args);
                return true;
            }
            else
            {
                result = null;
                return false;
            }
        }
        /// <summary>
        /// 添加属性
        /// </summary>
        /// <param name="propertyName"></param>
        /// <param name="value"></param>
        public void AddProperty(string propertyName, object value)
        {
            properties[propertyName] = value;
        }
        /// <summary>
        /// 转换成object
        /// </summary>
        /// <returns></returns>
        public object ToObject()
        {
            //properties
            return properties;
        }
        public T ToType<T>()
        {
            return (T)Convert.ChangeType(properties, typeof(T));
        }

        public void AddMethod(string methodName, Delegate method)
        {
            methods[methodName] = method;
        }

        public void AddMethod<T>(string methodName, Action<T> method)
        {
            methods[methodName] = method;
        }

        public void AddMethod<T1, T2>(string methodName, Action<T1, T2> method)
        {
            methods[methodName] = method;
        }

        // 添加更多方法的重载,根据需要传入参数的数量和类型
    }

使用案例

        /// <summary>
        /// 创建或更新
        /// </summary>
        /// <param name="type"></param>
        /// <returns>新增数据</returns>
        public int CreateOrUpdate(Models.Type type)
        {
            //type.TypeId;
            //type.TypeContent;
            //type.StatusId;
            using (var db = new SqlConnection(sqlConnStr))
            {
                DynamicObjectWrapper obj = new DynamicObjectWrapper();
                obj.AddProperty("TypeContent", type.TypeContent);
                obj.AddProperty("StatusId",type.StatusId);
                obj.AddProperty("CreatorId", 1);
                string sql = "insert into type (TypeContent,StatusId,CreatorId) values (@TypeContent,@StatusId,@CreatorId);";
                if (type.TypeId == 0)//插入
                {
                    sql += "SELECT CAST(SCOPE_IDENTITY() as int)";
                    int typeId = db.Query<int>(sql, obj.ToObject()).FirstOrDefault<int>();
                    return typeId;
                }
                else
                {
                    obj.AddProperty("TypeId", type.TypeId);
                    sql = "update type set TypeContent= @TypeContent where TypeId = @TypeId";
                    int ok = db.Execute(sql, obj.ToObject());
                    return ok;
                }
            }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值