C#基础知识---动态为类型添加属性
一、概述
通常情况下,我们是事先在类型中定义好属性的,但有时候,我们需要动态为一个类型添加某些属性,这个时候,我们就需要使用DynamicObject类型了。
二、Demo
using System; using System.Collections.Generic; using System.Dynamic; namespace ConsoleDynamicModel { public class DynamicModel : DynamicObject { private string propertyName; public string PropertyName { get { return propertyName; } set { propertyName = value; } } // The inner dictionary. Dictionary<string, object> dicProperty = new Dictionary<string, object>(); public Dictionary<string, object> DicProperty { get { return dicProperty; } } // This property returns the number of elements // in the inner dictionary. public int Count { get { return dicProperty.Count; } } // If you try to get a value of a property // not defined in the class, this method is called. public override bool TryGetMember( GetMemberBinder binder, out object result) { // Converting the property name to lowercase // so that property names become case-insensitive. string name = binder.Name; // If the property name is found in a dictionary, // set the result parameter to the property value and return true. // Otherwise, return false. return dicProperty.TryGetValue(name, out result); } // If you try to set a value of a property that is // not defined in the class, this method is called. public override bool TrySetMember( SetMemberBinder binder, object value) { // Converting the property name to lowercase // so that property names become case-insensitive. if (binder.Name == "Property") { dicProperty[PropertyName] = value; } else { dicProperty[binder.Name] = value; } // You can always add a value to a dictionary, // so this method always returns true. return true; } } class Program { static void Main(string[] args) { Console.WriteLine("动态为类型添加属性"); dynamic dynamicModel = new DynamicModel(); List<string> myList = new List<string>(); myList.Add("Name"); myList.Add("Age"); myList.Add("Hobby"); List<string> myValueList = new List<string>(); myValueList.Add("Mary"); myValueList.Add("18"); myValueList.Add("Dance"); for (int i = 0; i < myList.Count; i++) { string myAttr = myList[i]; dynamicModel.PropertyName = myAttr; dynamicModel.Property = myValueList[i]; } Console.WriteLine($"Name: {dynamicModel.Name}"); Console.WriteLine($"Age: {dynamicModel.Age}"); Console.WriteLine($"Hobby: {dynamicModel.Hobby}"); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)