Приведение между похожими типами в C # - PullRequest
2 голосов
/ 11 августа 2011

У меня есть два типа, которые имеют одинаковые члены, но разные имена. Есть ли простой или стандартный способ разыгрывать между ними, или я должен сделать серьезный взлом с отражением?

Ответы [ 3 ]

9 голосов
/ 11 августа 2011

Вы можете создать interface, который описывает оба типа.Сделайте так, чтобы каждый тип реализовывал интерфейс, затем используйте интерфейс вместо определенного типа при работе с кодом, который может работать с любым типом.

7 голосов
/ 11 августа 2011

Вы должны либо взломать с отражением (у меня есть PropertyCopy класс в MiscUtil , который может помочь) или использовать динамическую типизацию из C # 4.

Что касается .NET, то это полностью отдельных типов.

1 голос
/ 11 августа 2011

Это далеко не идеально, но я использую этот метод расширения для копирования свойств с одинаковыми именами между объектами на основе общего интерфейса

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...