簡體   English   中英

使用運行時類型和強制返回對象調用泛型方法

[英]Call Generic method using runtime type and cast return object

我正在使用反射調用在運行時確定類型的泛型方法。 我的代碼如下:

Type tType = Type.GetType(pLoadOut.Type);
MethodInfo method = typeof(ApiSerialiseHelper).GetMethod("Deserialise", new Type[] { typeof(string) });
MethodInfo generic = method.MakeGenericMethod(tType);
generic.Invoke(obj, new object[] { pLoadOut.Data });

這樣可以。 但是,generic.Invoke方法返回一個對象,但是我想要的是在運行時確定的類型。 使用這種方法是否可行,還是有更好的選擇?

標記

類型IS在運行時確定。 引用變量的類型是對象,實際實例是強類型的。

考慮到您正在使用反射來動態獲取對編譯器沒有類型信息的方法的訪問,這是最好的選擇-它甚至可能在構建環境中不存在。

編輯:如果您知道一些有關Deserialize返回的類型的信息,則可以利用委托方差。 例如:

Type tType = Type.GetType(pLoadOut.Type);
MethodInfo method = typeof(ApiSerialiseHelper).GetMethod("Deserialise", new Type[] { typeof(string) });
MethodInfo generic = method.MakeGenericMethod(tType);
Converter<string,ISomething> deser = (Converter<string,ISomething>)Delegate.CreateDelegate(typeof(Converter<string,ISomething>),generic);
ISomething result = deser(pLoadOut.Data);

如果返回的對象具有共同的祖先或接口,則可以強制轉換為它們。 如果沒有,則應該(例如,如果所有可能的返回類型都有一個名為DoSomething()的方法),然后創建一個具有DoSomething()方法的接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM