標題是也許沒有說清楚過載的方法,我會嘗試在一個例子來說明: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