第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C#中的泛型,使用變量類型作為參數(shù)

C#中的泛型,使用變量類型作為參數(shù)

天涯盡頭無女友 2019-07-24 14:53:40
C#中的泛型,使用變量類型作為參數(shù)我有一個通用的方法bool DoesEntityExist<T>(Guid guid, ITransaction transaction) where T : IGloballyIdentifiable;如何以下列方式使用該方法:Type t = entity.GetType();DoesEntityExist<t>(entityGuid, transaction);我一直收到愚蠢的編譯錯誤:找不到類型或命名空間名稱't'(您是否缺少using指令或程序集引用?)DoesEntityExist<MyType>(entityGuid, transaction);完美的工作,但我不想使用if指令每次調(diào)用具有單獨類型名稱的方法。
查看完整描述

3 回答

?
翻翻過去那場雪

TA貢獻2065條經(jīng)驗 獲得超14個贊

關(guān)于泛型的觀點是給出編譯時類型安全性 - 這意味著需要在編譯時知道類型。

可以使用僅在執(zhí)行時已知的類型調(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ù)傳遞,將決策推高到堆棧的一級?

如果您可以向我們提供有關(guān)您正在做的事情的更多信息,那將有所幫助。有時您可能需要使用上面的反射,但是如果您選擇正確的點,那么您可以確保只需要執(zhí)行一次,并讓低于該點的所有內(nèi)容以正常方式使用type參數(shù)。


查看完整回答
反對 回復 2019-07-24
?
ABOUTYOU

TA貢獻1812條經(jīng)驗 獲得超5個贊

解決這個問題的一種方法是使用隱式轉(zhuǎn)換:

bool DoesEntityExist<T>(T entity, Guid guid, ITransaction transaction) where T : IGloballyIdentifiable;

這樣稱呼它:

DoesEntityExist(entity, entityGuid, transaction);

更進一步,您可以將其轉(zhuǎn)換為擴展方法(它需要在靜態(tài)類中聲明):

static bool DoesEntityExist<T>(this T entity, Guid guid, ITransaction transaction) where T : IGloballyIdentifiable;

這樣稱呼:

entity.DoesEntityExist(entityGuid, transaction);


查看完整回答
反對 回復 2019-07-24
?
慕標琳琳

TA貢獻1830條經(jīng)驗 獲得超9個贊

我不確定我是否正確理解您的問題,但您可以這樣編寫代碼:

bool DoesEntityExist<T>(T instance, ....)

您可以按以下方式調(diào)用該方法:

DoesEntityExist(myTypeInstance, ...)

這種方式您不需要顯式寫入類型,框架將自動從實例中超過類型。


查看完整回答
反對 回復 2019-07-24
  • 3 回答
  • 0 關(guān)注
  • 2708 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號