news 2026/4/25 0:16:44

<span class=“js_title_inner“>使用.net9在C#中向现有对象动态添加属性</span>

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
<span class=“js_title_inner“>使用.net9在C#中向现有对象动态添加属性</span>

在 C# 中向现有对象动态添加属性并不像在 Python 或 JavaScript 中那样容易,因为 C# 是一种强类型语言。

但是,我们可以通过使用一些技术和库来实现这一点,例如扩展方法、字典等。本文将详细介绍如何在 C# 中实现这一点。ExpandoObject

方法 1:使用ExpandoObject

ExpandoObject是 .NET 提供的特殊类,允许动态添加属性。它实现了接口,这意味着您可以像使用字典一样动态添加属性。IDictionary<string, object>

using System; using System.Dynamic; namespace DynamicPropertiesExample { class Program { static void Main(string[] args) { dynamic expando = new ExpandoObject(); expando.Name = "John Doe"; expando.Age = 30; // Add new properties expando.Country = "USA"; expando.Occupation = "Engineer"; // Print output Console.WriteLine($"Name: {expando.Name}"); Console.WriteLine($"Age: {expando.Age}"); Console.WriteLine($"Country: {expando.Country}"); Console.WriteLine($"Occupation: {expando.Occupation}"); // Iterate through all properties foreach (var prop in (IDictionary<string, object>)expando) { Console.WriteLine($"{prop.Key}: {prop.Value}"); } } } }

方法 2:使用匿名类型

匿名类型还可用于动态添加属性,尽管它们通常用于静态方案。这是另一种方法。

using System; namespace DynamicPropertiesExample { class Program { static void Main(string[] args) { var person = new { Name = "Jane Doe", Age = 25 }; // Create another object using anonymous type to add new properties var extendedPerson = new { person.Name, person.Age, Country = "Canada", Occupation = "Designer" }; // Print output Console.WriteLine($"Name: {extendedPerson.Name}"); Console.WriteLine($"Age: {extendedPerson.Age}"); Console.WriteLine($"Country: {extendedPerson.Country}"); Console.WriteLine($"Occupation: {extendedPerson.Occupation}"); } } }

方法 3:使用扩展方法

虽然扩展方法不能直接添加属性,但它们可以扩展现有类型的功能。同样,我们可以通过组合字典来实现类似的效果。

using System; using System.Collections.Generic; namespace DynamicPropertiesExample { public class Person { public string Name { get; set; } public int Age { get; set; } } public static class PersonExtensions { private static readonly Dictionary<Person, Dictionary<string, object>> _additionalProperties = new(); public static void AddProperty(this Person person, string propertyName, object value) { if (!_additionalProperties.ContainsKey(person)) { _additionalProperties[person] = new Dictionary<string, object>(); } _additionalProperties[person][propertyName] = value; } public static object GetProperty(this Person person, string propertyName) { if (_additionalProperties.ContainsKey(person) && _additionalProperties[person].ContainsKey(propertyName)) { return _additionalProperties[person][propertyName]; } throw new KeyNotFoundException($"Property '{propertyName}' not found."); } } class Program { static void Main(string[] args) { var person = new Person { Name = "Alice", Age = 28 }; // Add dynamic properties person.AddProperty("Country", "UK"); person.AddProperty("Occupation", "Teacher"); // Get and print properties Console.WriteLine($"Name: {person.Name}"); Console.WriteLine($"Age: {person.Age}"); Console.WriteLine($"Country: {person.GetProperty("Country")}"); Console.WriteLine($"Occupation: {person.GetProperty("Occupation")}"); } } }

通过这些方法,我们可以向 C# 中的现有对象动态添加多个属性。尽管 C# 是一种强类型语言,但我们仍然可以通过这些技术实现动态功能,如反射和对象扩展。根据具体需求选择合适的方法可以有效提高代码的灵活性和可扩展性。

如果你喜欢我的文章,请给我一个赞!谢谢

寒冰 出处:mp.weixin.qq.com/s/4xdSKrrYBoi2JA0F4VzztA

- EOF -

技术群:添加小编微信dotnet999

公众号:dotnet讲堂

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 10:51:54

<span class=“js_title_inner“>阿里开源的一款数据同步工具 DataX,稳定又高效,嘎嘎好用!</span>

前言我们公司有个项目的数据量高达五千万&#xff0c;但是因为报表那块数据不太准确&#xff0c;业务库和报表库又是跨库操作&#xff0c;所以并不能使用 SQL 来进行同步。当时的打算是通过 mysqldump 或者存储的方式来进行同步&#xff0c;但是尝试后发现这些方案都不切实际&a…

作者头像 李华
网站建设 2026/4/23 11:42:48

救命神器9个降AIGC工具 千笔帮你快速降AI率

AI降重工具&#xff1a;让论文更自然&#xff0c;更安心 在当前学术写作中&#xff0c;越来越多的高校开始采用AIGC检测系统来评估论文的原创性。对于本科生而言&#xff0c;一篇由AI生成的论文&#xff0c;虽然内容完整、逻辑清晰&#xff0c;但往往因“AI痕迹”过重而被判定…

作者头像 李华
网站建设 2026/4/23 15:21:27

【小程序毕设全套源码+文档】基于微信小程序的同城钓鱼社交APP设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/20 18:50:30

掌握XSS手动测试:软件测试从业者必备技能

XSS手动测试的必要性与挑战‌ 跨站脚本攻击&#xff08;XSS&#xff09;是Web应用安全的头号威胁之一&#xff0c;能在用户浏览器中执行恶意脚本&#xff0c;导致数据泄露或会话劫持。对于软件测试从业者&#xff0c;手动测试是识别XSS漏洞的关键手段&#xff0c;尤其在自动化…

作者头像 李华
网站建设 2026/4/21 1:30:59

5.19 Grafana Dashboard开发:自定义监控面板与变量使用技巧

5.19 Grafana Dashboard开发:自定义监控面板与变量使用技巧 引言 自定义Dashboard是Grafana的核心功能。通过变量和模板,可以创建灵活、可复用的监控面板。本文将详细介绍Dashboard开发的方法和技巧。 一、Dashboard变量 1.1 变量类型 Query:查询变量 Custom:自定义变量…

作者头像 李华