标题是也许没有说清楚过载的方法,我会尝试在一个例子来说明:C#检查是否有与特定类型
我有一个自定义的DTO映射器替换AutoMapper,和当时需要他们两人的工作。它有一个自定义实现使用它,否则回退到AutoMapper。
自定义映射器看起来是这样的:
public static class CustomMapper
{
public static Entity1DTO Map(Entity1 source){
... some mapping code ...
}
public static Entity2DTO Map(Entity2 source){
... some mapping code ...
}
...
}
我需要一种方法来检查,如果Map
方法节选特定类型,但不检查手动每种类型。我试图创建另一个过载,它接受object
并返回object
,但我不知道如何检查其他过载是否满足特定类型并调用它们。
基本上我想要做一个普通的包装方法将处理重定向到CustomMapper或AutoMapper。喜欢的东西:
public static class Mapper
{
public static T Map<T>(object source){
return CustomMapper.Map(source) ?? AutoMapper.Map(source);
}
}
所以,问题是如何使在CustomMapper的方法,将知道另一个Map
方法重载可以处理接受的类型。如果没有返回null或抛出异常,那么我可以在包装器中回退到AutoMapper。
谢谢,但它更复杂。包装方法接受bject,当它调用自定义映射器时,它总是进入最后一个方法(然后调用automapper)。此外,automapper如何处理数组存在一个问题,它将它们视为T,而不是T [] ...所以基本上我坚持我的问题。如何根据类型变量调用适当的重载方法 – ZolaKt
@ZolaKt你可以看到我根本没有使用包装器方法 - 如果这不是你的选择(在这种情况下,为什么你甚至使用泛型? ),你可以把参数从'object'改成'dynamic',它应该可以正常工作。 – Luaan