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

时间:2011-08-10 21:23:41

标签: c# casting

我有两种类型具有相同成员但名称不同的类型。是否有一种简单或标准的方式在他们之间施放,或者我是否必须用反射做一些严重的黑客攻击?

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:7)

您必须使用反射进行黑客攻击(MiscUtil中有PropertyCopy类可以提供帮助)使用C#4中的动态类型。

就.NET而言,这些完全是单独的类型。

答案 2 :(得分:1)

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

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;
}

用法类似于

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

其中InternationalCustomer和客户都必须实施ICustomer。