在 C# 中,可以使用 AutoMapper 库来完成对象之间的映射,而不必手动编写显式的映射代码。但是,如果你希望通过反射来动态完成对象的映射,你可以编写自己的映射逻辑并使用反射来完成这个过程。
下面是一个简单的示例,演示了如何使用反射来完成对象之间的映射:
csharp
class Program
{
static void Main()
{
// 创建源对象
Person source = new Person { Name = "Alice", Age = 25 };
// 创建目标对象
PersonDto destination = new PersonDto();
destination = source.MapTo<Person, PersonDto>();
// 输出目标对象的属性值
Console.WriteLine($"Name: {destination.Name}, Age: {destination.Age}");
}
}
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class PersonDto
{
public string Name { get; set; }
public int Age { get; set; }
}
static class AutoMapper
{
public static TDest MapTo<TSource, TDest>(this TSource source) where TSource : class, new() where TDest : class, new()
{
// 创建目标对象
TDest destination = new TDest();
// 获取源对象的所有属性
PropertyInfo[] sourceProperties = typeof(TSource).GetProperties();
// 获取目标对象的所有属性
PropertyInfo[] destinationProperties = typeof(TDest).GetProperties();
// 使用反射完成对象的映射
foreach (var sourceProperty in sourceProperties)
{
foreach (var destinationProperty in destinationProperties)
{
if (sourceProperty.Name == destinationProperty.Name && sourceProperty.PropertyType == destinationProperty.PropertyType)
{
// 通过反射获取源对象的属性值
object value = sourceProperty.GetValue(source);
// 通过反射设置目标对象的属性值
destinationProperty.SetValue(destination, value);
break;
}
}
}
return destination;
}
}