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# StringBuilder.Replace 方法 (Char, Char, Int32, Int32)

    让我来详细讲解一下C#中的StringBuilder.Replace方法。 方法概述 StringBuilder.Replace方法的作用是将指定位置处的字符或一段指定长度的字符替换为另一个字符。该方法的定义为: public StringBuilder Replace(char oldChar, char newChar, int startIndex, …

    C# 2023年5月15日
    00
  • c#和javascript函数相互调用示例分享

    下面我将为您详细讲解“C#和JavaScript函数相互调用示例分享”的完整攻略。本篇攻略共包含以下内容: 前言 C#函数调用JavaScript函数示例 JavaScript函数调用C#函数示例 总结 前言 在Web开发中,我们常常需要在C#和JavaScript之间相互调用函数。下面,我将分别为您介绍C#函数调用JavaScript函数示例和JavaSc…

    C# 2023年5月15日
    00
  • C#中通过API实现的打印类 实例代码

    以下是一个使用C#中API实现的打印类的示例代码: using System; using System.Drawing.Printing; class Program { static void Main() { PrintDocument pd = new PrintDocument(); pd.PrintPage += new PrintPageEve…

    C# 2023年5月15日
    00
  • 用C#来解析PDF文件

    当我们要使用 C# 来解析 PDF 文件时,可以使用一些开源库,例如 iTextSharp、PDFSharp 和 Syncfusion.PDF 等。这些库可以帮助我们进行 PDF 文档的读取和编辑,并且提供了一些 API 用于实现文档的操作。 接下来,我们来具体讲解使用 iTextSharp 库和 PDFSharp 库来解析 PDF 文件的两个示例: 示例1…

    C# 2023年5月15日
    00
  • asp.net(c#)ref,out ,params的区别

    那么让我们来详细讲解一下“asp.net(c#)ref,out ,params的区别”的完整攻略吧。 1. ref参数 ref参数用于将变量的引用传递给函数,这意味着如果在函数内修改了该变量,那么同样会修改函数外的原始变量。使用ref参数时,需要确保变量已经被初始化。 示例代码: void AddOne(ref int x) { x += 1; } int …

    C# 2023年6月7日
    00
  • JS实现图片放大缩小的方法

    实现图片放大缩小的方法主要可以通过JS来实现。下面是JS实现图片放大缩小的方法的完整攻略: 一、为需要放大缩小的图片添加标签属性 首先在需要进行放大缩小的图片中添加data-zoom属性。例如: <img src="https://example.com/example.jpg" data-zoom="https://ex…

    C# 2023年6月8日
    00
  • C#实现向函数传递不定参数的方法

    在C#中,可以通过定义可变长度参数列表的语法来实现向函数传递不定参数的方法。这个语法是通过在函数参数列表的最后一个参数前添加“params”关键字来实现的。 具体实现步骤如下: 定义函数时,在函数的参数列表中定义一个参数类型为可变长度参数数组的参数,关键字为“params”,并定义一个参数名。 例如: public static void PrintList…

    C# 2023年6月1日
    00
  • c#中虚函数的相关使用方法

    C#中虚函数的相关使用方法 什么是虚函数? 在C#中,虚函数指的是一个可以被子类重写的函数。它可以在父类中定义,子类可以通过override关键字来覆盖父类中的虚函数。虚函数为多态提供了支持,也是C#中面向对象编程的一个重要特性。 为什么要使用虚函数? 使用虚函数的主要目的是允许子类覆盖父类中的实现细节。这样可以在不改变原有代码的基础上扩展程序的功能,更加灵…

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