我Dynamics CRM中(這在技術上是這裏的問題無關,但一些背景故事的解釋這個問題)工作的派生類型。有許多類型都是從類Entity
的。我想創建一個Class<T>() : where T: Entity
,但有進一步的限制,它只能從Entity
派生類的具體工作。如何最好地限制通用<T>類,其中,所有來自同一個基類
我現在這樣做的方法是有一個enum
匹配我想用,if/else if/else
我通過這些類型throw
方式,如果無效類型傳入的實體名稱。
感覺笨拙,我覺得我會過得更好寫一些像
public class ProductConverter<t> where T: Entity (OpportunityProduct, QuoteProduct, AccountProduct) { ... }
這樣類型的發動機可以說,「我們正在研究一個基類實體,同時我們只是努力這些派生類型的實體「。
我希望這可以讓我明白我在做什麼 - 我的目的是創建一個引擎來處理Entity Records之間的轉換,可以在不必重新編寫大塊代碼的情況下進行擴展(實際上,添加一個映射和類型參數)。我相信有更好的方法來做到這一點,所以請指出,如果你看到他們:)
edit
@ henk-holterman問我是否可以改變類。因爲他們正在生成的類文件,作爲對動態CRM Web服務的接口,這是不可能的。
edit
正如@jamiec指出,這些類partial
,所以我可以通過我希望修改的特定的類定義接口做到這一點。
你可以改變實體類嗎?添加一個界面?爲什麼沒有'Product'基類? –
不,它們是作爲系統接口自動生成的,我對此有限制。我會更新這個問題。 –
只是使用'typeof'來測試類的類型,那麼你可以使用switch語句並抽象出每種類型。 – bilpor