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# 手写识别方案整理

    书写识别,网上的大佬们都有输出。 书写识别存在的2个问题: 直接拿官网的案例(将 Windows Ink 笔划识别为文本和形状 – Windows apps | Microsoft Learn),会发现输出准确度不高。 另外如果书写过快,词组识别也是个问题,毕竟无法准确分割字之间的笔迹。 我结合之前开发经验,整理下书写识别比较完善的方案。 单个字的识别方案:…

    C# 2023年4月28日
    00
  • Asp.NET 多层登陆实现代码

    本文将详细讲解如何利用 Asp.NET 实现多层登陆,以下是完整的实现攻略: 第一步:创建用户数据库 在创建用户数据库之前,必须先安装 Microsoft SQL Server 数据库并创建一个新的数据库。可以按照以下步骤创建一个新的用户数据库: 打开 Microsoft SQL Server 的管理工具(如SqlServer Management Stud…

    C# 2023年5月31日
    00
  • C#之Socket(套接字)通信

    下面是关于“C#之Socket(套接字)通信”的完整攻略。 一、Socket(套接字)通信简介 Socket(套接字)是网络编程中的一个概念,主要用于实现网络通信。在Socket通信中,可以使用多种协议进行通信,如TCP、UDP等。 在C#中,Socket通信主要是通过System.Net命名空间中的一些类和接口实现的。 二、Socket(套接字)通信流程 …

    C# 2023年5月31日
    00
  • c#中LINQ的基本用法(二)

    下面是关于“c#中LINQ的基本用法(二)”的完整攻略: 标题 在 markdown 中,标题可以通过一个或多个 # 符号来表示,例如: # 一级标题 ## 二级标题 ### 三级标题 概述 LINQ 是一种数据访问技术,可以帮助我们以一种统一的方式处理各种类型的数据,包括 .NET 对象、SQL 数据、XML、ADO.NET 数据集等。在C#中, LINQ…

    C# 2023年5月31日
    00
  • DirectoryEntry配置IIS7出现ADSI Error:未知错误(0x80005000)

    问题描述: 在IIS7上配置使用DirectoryEntry连接LDAP时,可能会遇到ADSIError错误,具体表现为:”DirectoryEntry Configuration IIS7 ADSIError:未知错误(0x80005000)”。 解决方案: 确定LDAP连接使用的用户名和密码是否正确。使用错误的用户名或密码会导致连接失败。 确定连接字符串…

    C# 2023年5月15日
    00
  • C#对文件/文件夹操作代码汇总

    关于”C#对文件/文件夹操作代码汇总”的攻略,主要包含以下内容: 1.文件夹操作 创建文件夹 使用System.IO.Directory 类的CreateDirectory()方法可以创建一个新的文件夹。代码实例: string path = @"C:\MyDirectory"; if (!Directory.Exists(path)) …

    C# 2023年5月15日
    00
  • C#使用ML.Net完成人工智能预测

    C#可以使用ML.Net来实现人工智能预测,下面是一些基本的步骤: 1.安装ML.Net。可以通过Visual Studio NuGet包管理器或者官网下载进行安装。 2.准备数据。可以使用Microsoft Excel进行数据采集和整理,将数据存储到CSV格式或者SQL Server数据库中。 3.定义数据结构。为了训练和预测模型,需要定义数据结构。例如,…

    C# 2023年5月15日
    00
  • C#微信公众号与订阅号接口开发示例代码

    下面我将详细讲解如何进行C#微信公众号与订阅号接口开发,并提供以下两个示例说明: 示例一:获取微信公众号基本信息 步骤一:申请开发者账号 首先,你需要到微信公众平台官网上注册一个开发者账号。 步骤二:创建公众号 在申请开发者账号后,你需要创建一个新的公众号。 步骤三:获取AppID和AppSecret 创建公众号后,在公众号设置页面可以获取到AppID和Ap…

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