C# C语言中相似类型之间的转换#

C# C语言中相似类型之间的转换#,c#,casting,C#,Casting,我有两种类型,它们的成员相同,但名称不同。有没有一种简单或标准的方法可以在它们之间进行转换,或者我必须使用反射进行一些严重的黑客攻击?你必须使用反射进行黑客攻击(我有一个PropertyCopy类可以提供帮助),或者使用C#4中的动态键入 就.NET而言,这些是完全不同的类型。您可以创建一个描述这两种类型的。使每种类型都实现接口,然后在处理任何一种类型的代码时使用接口而不是特定类型。这远远不够完美,但我使用此扩展方法基于公共接口在对象之间复制具有相同名称的属性 public static T C

我有两种类型,它们的成员相同,但名称不同。有没有一种简单或标准的方法可以在它们之间进行转换,或者我必须使用反射进行一些严重的黑客攻击?

你必须使用反射进行黑客攻击(我有一个
PropertyCopy
类可以提供帮助),或者使用C#4中的动态键入


就.NET而言,这些是完全不同的类型。

您可以创建一个描述这两种类型的。使每种类型都实现接口,然后在处理任何一种类型的代码时使用接口而不是特定类型。

这远远不够完美,但我使用此扩展方法基于公共接口在对象之间复制具有相同名称的属性

public static T CopyTo<T>(this T source, T target) where T : class 
{
    foreach (var propertyInfo in typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public))
    {
        propertyInfo.SetValue(target, propertyInfo.GetValue(source, null), null);
    }

    return target;
}
publicstatict CopyTo(这个T源,T目标),其中T:class
{
foreach(typeof(T).GetProperties中的var propertyInfo(BindingFlags.Instance | BindingFlags.Public))
{
propertyInfo.SetValue(目标,propertyInfo.GetValue(源,null),null);
}
回报目标;
}
用法类似于

var internationalCustomer = new InternationalCustomer();
var customer = (Customer)internationalCustomer.CopyTo<ICustomer>(new Customer());
var internationalCustomer=新的internationalCustomer();
var customer=(customer)internationalCustomer.CopyTo(new customer());

其中InternationalCustomer和Customer都必须实现ICCustomer。

也许它们应该派生自同一个基类?已经有很多对象到对象的映射程序。例如,如果你真的想避免反射,并有“轻”的对象,你可以使用