C#实现获取不同对象中名称相同属性的方法

获取不同对象中名称相同属性的方法,可以通过反射实现。以下是C#实现该方法的步骤和示例说明:

步骤

步骤一:获取对象类型

使用GetType()方法获取对象的类型,返回Type类型的实例。

Type objectType = objectInstance.GetType();

步骤二:获取属性信息

使用GetProperties()方法获取对象的所有属性,返回PropertyInfo类型的数组。

PropertyInfo[] properties = objectType.GetProperties();

步骤三:过滤重复属性,获取名称相同的属性信息

遍历属性数组,通过属性名称筛选出名称相同的属性信息。

List<PropertyInfo> duplicateProperties = new List<PropertyInfo>();
List<string> propertyNames = new List<string>();

foreach (PropertyInfo propertyInfo in properties)
{
    if (propertyNames.Contains(propertyInfo.Name))
    {
        duplicateProperties.Add(propertyInfo);
    }
    else
    {
        propertyNames.Add(propertyInfo.Name);
    }
}

步骤四:获取属性值

遍历属性信息数组,使用GetValue()方法获取对象的该属性值。

foreach (PropertyInfo propInfo in duplicateProperties)
{
    object propertyValue = propInfo.GetValue(objectInstance, null);
    Console.WriteLine("{0} = {1}", propInfo.Name, propertyValue);
}

示例

假设有以下两个类:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class Animal
{
    public string Name { get; set; }
    public int LegCount { get; set; }
}

示例一

创建两个实例,分别为PersonAnimal,并使用上述方法获取名称相同的属性值。

Person person = new Person { Name = "Lucy", Age = 18 };
Animal animal = new Animal { Name = "Tom", LegCount = 4 };

object[] objects = new object[] { person, animal };

foreach (object obj in objects)
{
    Console.WriteLine("Type: {0}", obj.GetType().Name);
    Console.WriteLine("-------------");

    Type objectType = obj.GetType();
    PropertyInfo[] properties = objectType.GetProperties();

    List<PropertyInfo> duplicateProperties = new List<PropertyInfo>();
    List<string> propertyNames = new List<string>();

    foreach (PropertyInfo propertyInfo in properties)
    {
        if (propertyNames.Contains(propertyInfo.Name))
        {
            duplicateProperties.Add(propertyInfo);
        }
        else
        {
            propertyNames.Add(propertyInfo.Name);
        }
    }

    foreach (PropertyInfo propInfo in duplicateProperties)
    {
        object propertyValue = propInfo.GetValue(obj, null);
        Console.WriteLine("{0} = {1}", propInfo.Name, propertyValue);
    }

    Console.WriteLine("-------------");
}

输出结果:

Type: Person
-------------
Name = Lucy
-------------
Type: Animal
-------------
Name = Tom
-------------

示例二

创建两个字典,分别为personDicanimalDic,并使用上述方法获取名称相同的属性值。

Dictionary<string, object> personDic = new Dictionary<string, object>();
personDic.Add("Name", "Lucy");
personDic.Add("Age", 18);

Dictionary<string, object> animalDic = new Dictionary<string, object>();
animalDic.Add("Name", "Tom");
animalDic.Add("LegCount", 4);

Dictionary<string, object>[] dictionaries = new Dictionary<string, object>[] { personDic, animalDic };

foreach (Dictionary<string, object> dictionary in dictionaries)
{
    Console.WriteLine("Type: {0}", dictionary.GetType().Name);
    Console.WriteLine("-------------");

    Type objectType = dictionary.GetType().GetGenericArguments()[0];

    PropertyInfo[] properties = objectType.GetProperties();

    List<PropertyInfo> duplicateProperties = new List<PropertyInfo>();
    List<string> propertyNames = new List<string>();

    foreach (PropertyInfo propertyInfo in properties)
    {
        if (propertyNames.Contains(propertyInfo.Name))
        {
            duplicateProperties.Add(propertyInfo);
        }
        else
        {
            propertyNames.Add(propertyInfo.Name);
        }
    }

    foreach (PropertyInfo propInfo in duplicateProperties)
    {
        object propertyValue = dictionary[propInfo.Name];
        Console.WriteLine("{0} = {1}", propInfo.Name, propertyValue);
    }

    Console.WriteLine("-------------");
}

输出结果:

Type: Dictionary`2
-------------
Name = Lucy
-------------
Type: Dictionary`2
-------------
Name = Tom
-------------

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现获取不同对象中名称相同属性的方法 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C#编程实现获取文件夹中所有文件的文件名

    下面是详细的攻略: 使用C#编程实现获取文件夹中所有文件的文件名 1. 打开Visual Studio创建新的控制台应用程序项目 以Visual Studio 2019为例,新建项目流程如下: 打开 Visual Studio。 选择“创建新项目”。 选择“控制台应用程序”。 可以选择使用.Net Framework或.Net Core,选择一个你习惯的就好…

    C# 2023年6月1日
    00
  • ASP.net Core微信平台开发配置Token

    ASP.NET Core微信平台开发配置Token攻略 微信平台开发是一个非常流行的应用场景,许多企业和个人都在使用微信平台来开发自己的应用程序。在ASP.NET Core中,我们可以使用微信平台提供的API来实现微信平台开发。本攻略将介绍如何在ASP.NET Core中配置Token,以便我们可以使用微信平台API。 配置Token 在微信平台开发中,我们…

    C# 2023年5月17日
    00
  • 如何使用Rotativa在ASP.NET Core MVC中创建PDF详解

    如何使用 Rotativa 在 ASP.NET Core MVC 中创建 PDF Rotativa 是一个用于在 ASP.NET Core MVC 中创建 PDF 的开源工具,可以将 Razor 视图转换为 PDF 文件。本攻略将详细介绍如何使用 Rotativa 在 ASP.NET Core MVC 中创建 PDF,并提供多个示例说明。 步骤一:安装 Ro…

    C# 2023年5月17日
    00
  • nginx配置访问图片路径以及html静态页面的调取方法

    下面我就为您详细讲解“nginx配置访问图片路径以及html静态页面的调取方法”的完整攻略。 首先,我们需要先了解一下Nginx的配置文件。Nginx的配置文件一般是在/etc/nginx/目录下的nginx.conf文件。我们可以通过编辑这个文件来配置Nginx的访问规则,包括访问图片路径和静态页面的调取方法。 首先,我们需要配置访问图片的路径。可以在ng…

    C# 2023年6月8日
    00
  • c#基础学习之封装

    C#基础学习之封装 封装是面向对象编程三大特性之一,也是面向对象的基本概念之一。封装就是将数据和行为(方法)包装在类里面,隐藏内部实现的细节,使得外界代码无法直接访问和修改对象内部的数据,只能通过对象的公共方法来访问和修改对象的状态。封装可以提高代码的安全性和可维护性,提高代码的复用性和可扩展性。 封装的三要素 访问修饰符:public、private、pr…

    C# 2023年6月6日
    00
  • .NET的动态编译与WS服务调用详解

    以下是“.NET的动态编译与WS服务调用详解”的完整攻略,包括什么是动态编译、如何使用C#实现动态编译、如何使用WS服务调用以及两个示例。 什么是动态编译? 动态编译是指在程序运行时动态地将代码编译成可执行代码的过程。在.NET中,我们可以使用System.CodeDom.Compiler命名空间中的类来实现动态编译。动态编译可以用于实现插件式架构、动态生成…

    C# 2023年5月15日
    00
  • C#中4种深拷贝方法介绍

    C#中4种深拷贝方法介绍 在C#中,对象的拷贝通常分为浅拷贝和深拷贝。浅拷贝只是简单地复制变量值,两个对象所引用的堆内存空间是相同的;深拷贝则是创建一个新的对象,并复制其中所有的属性,两个对象所引用的堆内存空间是不同的。深拷贝通常在需要复制对象并修改其属性的情况下使用,而浅拷贝则更适合在对对象的只读访问上使用。 下面介绍C#中4种常用的深拷贝方法。 1. 使…

    C# 2023年5月31日
    00
  • CodeBuilder 3 预览版发布

    CodeBuilder是一款强大的代码生成工具,目前发布了 3.0 preview 2,大家可以前去下载体验 官方主页。 1、多种数据源 基于 ADO.NET 的数据驱动 基于 Fireasy 3,支持从 SqlServer、MySql、Oracle、Firebird、PostgreSql、SQLite、达梦、人大金仓、神通数据库,以及 OleDb 驱动。可…

    C# 2023年4月22日
    00
合作推广
合作推广
分享本页
返回顶部