我目前有一個映射設置來從一個基類轉換到另一個基類。我正在將客戶類映射到第三方控件。值是相似的,但有足夠的差異,我不能重用第三方控件。有沒有辦法使用通用對象參數來設置Func?
_converters = new Dictionary<Type, Func<AnnotationBase, AnnotationMark>>();
_converters.Add(typeof(HighlightAnnotation), ToHighlighterAnnotationMark);
_converters.Add(typeof(RectangleAnnotation), ToRedactionAnnotationMark);
_converters.Add(typeof(StampAnnotation), ToTextStampAnnotationMark);
這個作品發現,但我有一些地方要做額外的鑄造。例如:
private AnnotationMark ToTextStampAnnotationMark(AnnotationBase tool)
{
TextStampAnnotationMark mark = new TextStampAnnotationMark();
mark.Location = new MarkLocation { X = (int)tool.Location.X, Y = (int)tool.Location.Y };
mark.Size = new MarkSize { Width = (int)tool.Size.Width, Height = (int)tool.Size.Height };
mark.Text = ((StampAnnotation)tool).Text;
return mark;
}
在這個例子中,我必須區分的AnnotationBase
是StampAnnotation
我知道恰好是正確的,因爲這是與映射程序註冊的類型。不過,我希望將此方法的簽名更改爲private TextStampAnnotationMark ToTestStampAnnotationMark(StampAnnotaion)
。
是否有反正做功能映射或行爲像這樣?
Func<TTool,TMark>()
where TTool : AnnotationBase
where TMark : AnnotationMark