Как я могу сделать так, чтобы код ниже возвращал true?

  1. handler переменная, определенная как object с целью имитировать реальную среду.

  2. Я уже читал https://stackoverflow.com/ questions / 12160460 / when-is-obj-gettype-isinstanceoftypetypeofmyclass-true

void Main()
{
    object handler = new TestIntegrationEventHandler();
    Type eventType = typeof(TestIntegrationEvent);
    Type concreteType = typeof(IIntegrationEventHandler<>).MakeGenericType(eventType);
    Console.WriteLine(handler.GetType().IsInstanceOfType(concreteType));
}

public class TestIntegrationEvent : IntegrationEvent
{
}

public class IntegrationEvent
{
}

public class TestIntegrationEventHandler : IIntegrationEventHandler<TestIntegrationEvent>
{
    public async Task Handle(TestIntegrationEvent @event)
    {
    }
}

public interface IIntegrationEventHandler<in TIntegrationEvent> : IIntegrationEventHandler where TIntegrationEvent : IntegrationEvent
{
    Task Handle(TIntegrationEvent @event);
}

public interface IIntegrationEventHandler
{
}
c#
0
cilerler 28 Ноя 2018 в 08:12

1 ответ

Лучший ответ

Все наоборот!

private static void Main()
{
    object handler = new TestIntegrationEventHandler();
    Type eventType = typeof(TestIntegrationEvent);
    Type concreteType = typeof(IIntegrationEventHandler<>).MakeGenericType(eventType);
    Console.WriteLine(concreteType.IsInstanceOfType(handler));
    Console.ReadLine();
}

Из документация для IsInstanceOfType:

Определяет, является ли указанный объект экземпляром текущего типа.

Итак, вы спрашиваете, является ли IIntegrationEventHandler<TestIntegrationEvent> экземпляром типа TestIntegrationEventHandler, что, конечно же, неверно. Хотя мне очень кажется, что название метода мало помогает ...

2
taquion 28 Ноя 2018 в 05:27