3 回答

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊
關(guān)于泛型的觀點(diǎn)是給出編譯時(shí)類型安全性 - 這意味著需要在編譯時(shí)知道類型。
您可以使用僅在執(zhí)行時(shí)已知的類型調(diào)用泛型方法,但您必須使用反射:
// For non-public methods, you'll need to specify binding flags tooMethodInfo method = GetType().GetMethod("DoesEntityExist") .MakeGenericMethod(new Type[] { t });method.Invoke(this, new object[] { entityGuid, transaction });
伊克。
您是否可以使您的調(diào)用方法變得通用,并將您的類型參數(shù)作為類型參數(shù)傳遞,將決策推高到堆棧的一級(jí)?
如果您可以向我們提供有關(guān)您正在做的事情的更多信息,那將有所幫助。有時(shí)您可能需要使用上面的反射,但是如果您選擇正確的點(diǎn),那么您可以確保只需要執(zhí)行一次,并讓低于該點(diǎn)的所有內(nèi)容以正常方式使用type參數(shù)。

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊
解決這個(gè)問題的一種方法是使用隱式轉(zhuǎn)換:
bool DoesEntityExist<T>(T entity, Guid guid, ITransaction transaction) where T : IGloballyIdentifiable;
這樣稱呼它:
DoesEntityExist(entity, entityGuid, transaction);
更進(jìn)一步,您可以將其轉(zhuǎn)換為擴(kuò)展方法(它需要在靜態(tài)類中聲明):
static bool DoesEntityExist<T>(this T entity, Guid guid, ITransaction transaction) where T : IGloballyIdentifiable;
這樣稱呼:
entity.DoesEntityExist(entityGuid, transaction);

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊
我不確定我是否正確理解您的問題,但您可以這樣編寫代碼:
bool DoesEntityExist<T>(T instance, ....)
您可以按以下方式調(diào)用該方法:
DoesEntityExist(myTypeInstance, ...)
這種方式您不需要顯式寫入類型,框架將自動(dòng)從實(shí)例中超過類型。
- 3 回答
- 0 關(guān)注
- 397 瀏覽
添加回答
舉報(bào)